在iOS開發中或面試中,經常會遇到,兩個或者多個控制器之間傳值的問題 ,總結的集中方法僅供參考!
問題 :將B控制器中的textField 輸入內容,傳到A控制器中的label上顯示出來,如何傳值?
首先在storyboard中添加相關聯的控制器(如下):

第一種方法: Block方法
1>在B控制器中定義一個block屬性,這個block 是一個返回值為void,參數為NSString(傳遞textField的值)的block。
2>在B控制器的btw點擊事件中,執行block,參數傳self.textField.text.
3>在A控制器的-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender方法中 獲取segue.destinationViewController,給它的block屬性賦一段代碼,這段代碼就是將傳過來的NSString 賦值給label
1》在Bcontroller.h中

2》在Bcontroller.m中
3》在Bcontroller.h中

4》在Bcontroller.m中

第二種方法:代理方法
1>在B控制器中定義協議方法,方法中要有NSString的參數,用來傳遞B控制器中textField的內容。(誰要傳數據誰就定義協議,並添加代理屬性).
2>在btn的點擊事件中,執行代理的方法。傳遞參數進去,並且跳轉到控制器A控制器.
3>在A控制器中的-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender方法中,設置代理,因為這個方法能獲得B控制器,通過 segue.destinationViewController。
4>實現代理方法,將傳過來的參數賦值給label。
1》在Bcontroller.h中

2》在Bcontroller.m中

3》在Acontroller.h中

4》在Acontroller.m中

第三種方式:通知方法
1>在B控制器中的btn點擊方法中,發布一個通知UITextFieldTextDidEndEditingNotification。
2>在A控制器中添加self為觀察者,監聽UITextFieldTextDidEndEditingNotification通知,執行方法,方法中含有NSNotification的 參數,參數中就有B控制器中textField中text,賦值即可
1》在Bcontroller.h中

2》在Bcontroller.m中

3》在Acontroller.h中

4》在Acontroller.m中

第四種方法:用NSUserDefaults傳值
在Bcontroller中
需要傳值的地方編碼
//存儲數據
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"A界面需要傳遞的值" forKey:@"自己的KEY"];
//設置同步
[defaults synchronize];
在Acontroller文件中
在ViewDidLoad中編碼讀取傳遞過來的值
//讀取A界面傳遞過來的值
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
self.userId = [defaults valueForKey:@"自己的KEY"];
