【iOS】协议传值 和 属性传值

协议传值

协议传值作为一个反向的传值方式,在界面之间的用途十分广泛,简单用法大致为,从a界面切换到b界面,此时在b界面设置协议和代理,通过代理将所需要的值传回a界面,a界面的视图控制器需要遵守b界面的协议,从而去实现协议函数,在函数中的参数,就是从b界面所传回来的值。

我们来看代码实现

首先在第二个界面设置协议和代理:

//定义代理协议
@protocol VCSecondDelegate <NSObject>

//定义一个协议函数改变背景颜色
- (void)changeColor: (UIColor *)color;

@end


@interface VCSecond : ViewController

//定义一个代理对象
//代理对象执行协议函数
//通过代理对象实现协议函数,达到代理对象改变本身属性的目的
//代理对象一定要实现代理协议
@property (assign, nonatomic) id<VCSecondDelegate> delegate;

@end

在第一个界面,视图控制器的类遵守该协议

@interface VCFirst : ViewController <VCSecondDelegate>
- (void)changeColor:(UIColor *)color;
@end

在第一个界面里让第二个界面显示

//推出视图控制器2
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    VCSecond *vc2 = [[VCSecond alloc] init];
    
    //将当前的控制器做为代理对象赋值
    vc2.delegate = self;
    
    [self.navigationController pushViewController:vc2 animated:YES];
}

在第二个界面对代理对象赋值:

//点击按钮时,触发代理的事件
- (void)pressChange {
    [_delegate changeColor: [UIColor redColor]];
}

此时第一个界面所需要的第二个界面的值已经传到了第一个界面,我们在第一个界面完成该协议函数,就可以得到这个值,然后对该值去做相应的处理即可:

- (void)changeColor:(UIColor *)color{
    self.view.backgroundColor = color;
}

协议传值主要应用是一个反向传值,类似于更换头像,和登录注册等情况下使用。

属性传值

属性传值和协议传值最重要的一点不同,属性传值是在从a界面切换到b界面的时候直接将值传过去,对b界面的属性进行赋值,此时通过a界面所切换过来的b界面的属性就有其该有的值。

首先在b界面设置属性:

@interface SecondViewController : ViewController

@property (nonatomic, strong) UIColor *newcolor;

@end

然后在a界面将b界面显示出来,并且在这里对属性赋值:

//推出视图控制器2
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    SecondViewController *secondViewController = [[SecondViewController alloc] init];
    //对属性进行赋值
    secondViewController.newcolor = [UIColor orangeColor];
    [self.navigationController pushViewController:secondViewController animated:YES];
}

此时的b界面newcolor属性就有了值。

self.view.backgroundColor = _newcolor;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值