iOS UIViewController之间的传值方式之一:委托代理

iOS开发中经常需要在2个控制器之间传递数值,例如:aViewController上有一个label标签,bViewController有一个TextField等待用户输入,并且将用户输入的内容显示到aViewController中的label上,这中情况就是控制器之间的数值传递了,或者说数据通信。

实现的方式有很多种,本人主要实验了四种,一是delegate委托代理模式,二是notification通知,三是KVC模式,四是block回调,如果还有其他的欢迎指教,下面说明下这四种传值方式的实现。

1. delegate委托代理模式:

本质:bViewController没有修改aViewController种的label标签的能力,因此,需要委托aViewController去做,至于怎样子去做,那需要bViewController定义好做的方法(即protocol协议),然后委托aViewController按照这个方式去做。

核心代码实现:

第一步:bViewController发布协议,并设定delegate属性(在BViewController.h种声明)

.h文件中:

@ protocol BViewControllerDelegate<NSObject>

@optional

- (void)changeLabelText:(NSString *text);

@end


@interface BViewController : UIViewController

 @property (nonatomic, assign) id<BViewControllerDelegate>delegate;

@property (nonatomic, strong) UITextField *textField;

@end

第二步:在视图消失时,让bViewController的代理调用协议方法去改变label值

.m文件中:

- (void)viewWillDisapper:(BOOL)animated

{

[self.delegate changeLabelText:_textField.text]; // 让代理去实现改变label值

}


第三步:在aViewController遵守协议,并实现协议方法改变label值

aViewController的.h文件中

@interface AViewController :UIViewController<BViewControllerDelegate>

@property (nonatomic, strong) UILabel *label;

@property (nonatomic, strong) BViewController * bVC;

@end


.m文件中: 实现协议方法

- (void)changeLabelText: (NSString *)text

{

_label.text = text;

}


同时别忘了将aViewController设置为bViewController的代理,因为自己写的时候比较容易忘记,特别提醒下,在推送画面时候设置:

bVC.delegate = self;


至此通过委托代理传值就已经实现了。

按照思路写Demo一般没什么问题,可以尝试下,其他方式明天继续写,睡觉。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值