ios-prepareForSegue情境切換KVC傳值詳解

來源:互聯網
上載者:User

ios-prepareForSegue情境切換KVC傳值詳解

iOS開發中,通過 storyboard 可以直接切換情境,也就是在 不同的ViewController之間跳轉;在跳轉的過程中會自動的調用prepareForSegue方法,我們在該方法中可以 直接給 目標情境設定要傳入的值;下面來介紹一下,使用KVC和普通的屬性方式來傳值的小Demo.

如,有兩個 視圖控制器,A和 B ,

A的視圖控制器上有一個按鈕,拖拽按鈕的事件到 B 控制器上 (使用show),

A在切換的過程中需要給B一個number值,B收到該值之後顯示出來;

A綁定的類是,ViewController,B綁定的是BViewController

使用storyboard的傳值,預設會觸發

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

在這個方法中,segue參數包含重要的3個屬性:

分別是: 控制器標識符,

源控制器,在中就是A控制器

目標控制器,在中就是B控制器

對應的屬性如下:

 

@property (nonatomic, readonly) NSString *identifier;@property (nonatomic, readonly) id sourceViewController;@property (nonatomic, readonly) id destinationViewController;

 

sender是觸發 這個情境切換的事件來源,也就是 button

代碼如下:

A控制器對應的代碼:

 

////  ViewController.h//  TestPrepareSegue////  Created by yb on 15/2/10.//  Copyright (c) 2015年 http://blog.csdn.net/yangbingbinga. All rights reserved.//#import @interface ViewController : UIViewController@end

////  ViewController.m//  TestPrepareSegue////  Created by yb on 15/2/10.//  Copyright (c) 2015年 http://blog.csdn.net/yangbingbinga. All rights reserved.//#import ViewController.h#import BViewController.h@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    }#pragma makr - 情境切換,適合通過storyboard拖拽的切換- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{        NSLog(@觸發該情境切換的sender對象的類型是:%@,[sender class]);    #pragma mark - 方法一,使用KVC給B 也就是目標情境傳值    UIViewController *destinationController=[segue destinationViewController];        [destinationController setValue:@119 forKey:@number];    #pragma mark - 方法2,使用屬性傳值,需匯入相關的類.h    //    BViewController *bController=[segue destinationViewController];//   bController.number=@188;    #pragma mark - 方法3,強制類型轉換    }@end
B控制器對應的代碼:

 

 

////  BViewController.h//  TestPrepareSegue////  Created by 楊斌 on 15/2/10.//  Copyright (c) 2015年 http://blog.csdn.net/yangbingbinga. All rights reserved.//#import @interface BViewController : UIViewController@property(strong,nonatomic)NSValue *number;//接收來自A  controller傳來的值@end

////  BViewController.m//  TestPrepareSegue////  Created by 楊斌 on 15/2/10.//  Copyright (c) 2015年 http://blog.csdn.net/yangbingbinga. All rights reserved.//#import BViewController.h@interface BViewController ()@property (weak, nonatomic) IBOutlet UIButton *buttonOnB;@end@implementation BViewController- (void)viewDidLoad {    [super viewDidLoad];#pragma mark - 列印接收到來自A 的值number    NSLog(@%@,_number);        [_buttonOnB setTitle:[NSString stringWithFormat:@收到來自A的傳值: %@,_number] forState:UIControlStateNormal];        }@end

運行一下,點擊按鈕,可以跳轉到B並且 A給 B成功傳入 一個 NSValue類型的 值 number,

 

傳值時,使用KVC 或者 屬性傳值

最終效果如下:



 

可以看到B控制器,成功拿到 A傳來的值

注意事項:

1.不要 直接在 button也就是 事件來源 直接拖拽切換事件到B的NavigationController上,否則會導致崩潰

2.根據上述, 一組 ViewControllers公用一個 NavigationController最好,可以 添加title後刪除Navigation

3.有時候可能需要比較sender的類型 來確定跳轉的來源;我們可以比較sender ,使用isEqualTo比較,確定是哪個sender觸發的切換情境

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.