关闭

传值有四种方法 : 1.属性传值 2.单例传值 3.代理传值 4.block传值

38人阅读 评论(0) 收藏 举报
传值有四种方法 :
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.  1.后一个界面定义一个协议 并且定义一个属性叫delegate
 
2.  2.  在前一个界面进入后一个界面的瞬间(创建完后一个界面之后,让前一个界面作为后一个界面的delegate)
 
3.   3.  前一个界面实现代理方法
 
4.   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;
        });
    

    }];
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:42次
    • 积分:10
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档