iOS开发传值方式

一、属性传值(正向传值)

//实例化一个新的控制器ViewControllerB
    ViewControllerB *ctl = [ViewControllerB new];
    //正向传值,通过成员变量
    ctl.receiveStr = sender.titleLabel.text;
    
    //切换
    /*
        参数1:切换的控制器对象
        参数2:是否需要动画
        参数3:回调block,暂时不使用
     */
    [self presentViewController:ctl animated:YES completion:nil];

通常用于正向传值,适用于A和B相互具有一定关联性。不能用于隔页面传值。而且,需要传值的属性不能是私有属性,也就是说在.h中声明出来的属性才可以传值。

二 block传值

使用场景:
常用于回调,简单的说就是B有一个按钮,当按钮被点击时把点击事件传传给A,并传一个字符串"B被点了"。

 

//首先在B控制器中声明一个block,参数是一个字符串
@property (nonatomic,copy) void(^block)(NSString *title);
//同样在B控制器,在按钮点击触发的方法里执行block
- (void)buttonClick:(UIButton *)sender
{
   //改变ViewControllerA上UILabel显示的内容
    _block(sender.titleLabel.text);

    //关闭
    [self dismissViewControllerAnimated:YES completion:nil]; }
  
    ViewControllerB *ctl = [ViewControllerB new];

    
    //给ctl中的成员block赋值实体
    ctl.block = ^(NSString *deliverStr){
        //给UILabel上的text赋值   
label.text = deliverStr;  
    };
    
    //切换到ViewControllerB
    [self presentViewController:ctl animated:YES completion:nil];

同样的Block在这里作为属性存在,同属性传值一样,需要两个控制器间具有一定关联性。不能跨页面传值。
如果一定要跨,就要像接力赛一样,A传给B,B传给C这样
//现在回到A控制器,在推出B的时候给B的block赋值,简单的说,就是在收到B的消息时,想要做什么事 BController *B = [BController new]; B.block = ^(NSString *title) { //do someThing A.title = title; }; [A.navigationController pushViewController:B animated:YES];


作者:Adoma
链接:https://www.jianshu.com/p/51153323c8bf
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 
//现在回到A控制器,在推出B的时候给B的block赋值,简单的说,就是在收到B的消息时,想要做什么事 BController *B = [BController new]; B.block = ^(NSString *title) { //do someThing A.title = title; }; [A.navigationController pushViewController:B animated:YES];


作者:Adoma
链接:https://www.jianshu.com/p/51153323c8bf
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2018-05-17 15:21  朝阳向日葵  阅读(154)  评论(0编辑  收藏  举报