提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
简单介绍一下iOS中的协议传值和属性传值
一、协议传值
定义
协议传值是一种反向传值。指把数值从第二个界面(B)传入第一个界面(A)
协议是一个方法签名列表,在其中可以定义很多个方法。
实现
- 在要传递值的页面B中声明一份协议
- 在要传值的页面B中声名一个代理属性
- 在接收页面A中添加方法
- 在A中签订协议
在B控制器中声明一份协议
@protocol VCSecondDelegate <NSObject>
- (void)changeColor: (UIColor*)color;
在B视图中声明一个代理属性
@property(assign,nonatomic)id<VCSecondDelegate > delegate;
在B视图中添加一个按钮,并设置按钮触发事件
- (void)viewDidLoad {
[super viewDidLoad];
UIButton* btn = [[UIButton alloc] init];
btn.frame = CGRectMake(100, 100, 100, 100);
[btn setTitle:@"111" forState:UIControlStateNormal];
[self.view addSubview:btn];
[btn addTarget:self action:@selector(pressChange) forControlEvents:UIControlEventTouchUpInside];
// Do any additional setup after loading the view.
}
- (void)pressChange{
[_delegate changeColor:[UIColor redColor]];
}
在A视图中签订协议
@interface vcFirst :
UIViewController<VCSecondDelegate>
签订代理对象
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
vcSecond* vcSecond = [[vcSecond alloc] init];
vcSecond.title = @"B";
vcSecond.delegate = self;
[self.navigationController pushViewController:vcSecond animated:YES];
}
二、属性传值
定义
属性传值是正向传值。属性传值是指从A页面传值到B页面。属性传值 是最常用的传值方法。
实现
- 在页面B中实现属性
- 在页面B中设置协议
- 在页面A的创建的页面B的控制器的方法礼进行赋值操作
在B中声明属性
@property (nonatomic,copy) NSString *bText;
在A中定义一个属性
@property (nonatomic,copy) NSString *aText;
在A中给B的属性进行复制并跳转控制器
- (void) press {
SecondViewController *bViewController = [[SecondViewController alloc]init];
bViewController.bText = aText;
[self presentViewController:bViewController animated:YES completion:nil];
}
总结
当需要在第二界面中完成对数据的操作时,我们可以先把数据从第一界面利用属性传值传到的界面,在对数据进行相应操作后在利用协议传值将数据传至第一界面。