iOS開發控制器之間傳值的幾種小方法


 

在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"];

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM