zoukankan      html  css  js  c++  java
  • iOS的四种传值方式

    传值有四种方法 :

    1. 属性传值
    2. 单例传值
    3. 代理传值
    4. block传值
     
     
    一.属性传值   (前-->后)
    1. 后面的界面定义一个属性  存放前一个界面传过来的值
       注意:属性定义成字符串还是别的类型 取决于你的需求 
     
    2. 后面的界面创建完毕后,为属性赋值(记录需要传递的值)
     
    3. 在需要使用值的地方  使用属性记录的值
     
    4. 通过 定义属性 达到传值目的的方法 称为属性传值
    属性传值一般用于 从前一个界面向后一个界面传值
     
    二.单例传值  (万能的传值方式  可以跨多个页面之间进行传值)
     
    1.首先定义一个单例  在这个单例中只有一个实例  但是可以有多个属性
     
    2. 
     static Single *single=nil;
     +(Single *)shareSingle
     {
        @synchronized(self){
            if (single==nil) {
                single=[[Single alloc] init];
            }
            
        return single;
        }
    

      

        
    3.把要传的值赋值给单例中d的属性

     
    注:单例  通常提供一个类方法 获取这个唯一的实例
    //但绘制类型  就是这个类的类型 命名以default shared  current standard等开头
    单例一个类只有一个实例  单例的对象通常不释放  直到程序退出
     
     
    三.代理传值    (后>)
     
    1.   后一个界面定义一个协议 并且定义一个属性叫delegate
     
    2.  在前一个界面进入后一个界面的瞬间(创建完后一个界面之后,让前一个界面作为后一个界面的delegate)
     
    3.  前一个界面实现代理方法
     
    4.  后一个界面在合适的机会 让代理 执行代理方法(传的值以参数的形式含在代理方法里)
     
     
    四.block传值   (后->前)
     
    1.后一个界面声明block属性
     
    @property (nonatomic,copy)void (^chuanzhi)(NSString *_str);
    

      

     
    2.在.m中的传值方法里检查block是不是存在
     
    if (_chuanzhi) {
            _chuanzhi(_textField.text);
            _chuanzhi=nil;
        }
    

      

     
    3.前一个界面进入后一个界面的方法里实现这个block
     
     [(dVC)后一个界面控制器 setChuanzhi:^(NSString *_str){
            dispatch_async(dispatch_get_main_queue(), ^{
            
                _label.text=_str;
            });
        
    
        }];
    

      

  • 相关阅读:
    sql server 错误9003:LSN无效(日志扫描号无效),对数据库的修复.
    用C#调用C++DLL时的字符串指针参数传递问题
    sql server 2005中的Service broker小示例(未完善)
    水晶报表钻取数据,在明细层导的时候,报表会从新加载,并显示主报表
    [转]gridview获取当前行索引的方法
    验证视图状态 MAC 失败的解决办法
    SQL SERVER 2005中对存储过程进行签名(转)
    MSChart图表控件的一些使用
    Repository模式
    职能式管理和流程式管理
  • 原文地址:https://www.cnblogs.com/likun123/p/3862362.html
Copyright © 2011-2022 走看看