zoukankan      html  css  js  c++  java
  • 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"];

     

  • 相关阅读:
    【Leetcode】Unique Binary Search Trees
    linux C函数之access函数的用法
    Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析
    【Leetcod】Unique Binary Search Trees II
    KVM客户机使用主机USB设备
    运行Maven是报错:No goals have been specified for this build
    SQL2008R2 express版本不支持维护计划
    已超过了锁请求超时时段的原因
    Oracle免客户端InstantClient安装使用
    将存储过程的返回值赋给变量
  • 原文地址:https://www.cnblogs.com/LiLihongqiang/p/5725240.html
Copyright © 2011-2022 走看看