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
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。