UDN-企业互联网技术人气社区

板块导航

浏览  : 586
回复  : 1

[移动平台] iOS Block界面反向传值

[复制链接]
琳琅女称霸全服的头像 楼主
发表于 2015-12-17 21:07:04 | 显示全部楼层 |阅读模式

  在上篇博客 《iOS Block简介》 中,侧重解析了 iOS Block的概念等,本文将侧重于它们在开发中的应用。

  Block是iOS4.0+ 和Mac OS X 10.6+ 引进的对C语言的扩展,用来实现匿名函数的特性。

  用维基百科的话来说,Block是Apple Inc.为C、C++以及Objective-C添加的特性,使得这些语言可以用类lambda表达式的语法来创建闭包。关于闭包,一句话解释简洁明了:闭包就是能够读取其它函数内部变量的函数。

  在iOS开发中,Block有很多方面的用途,界面反向传值就是其中之一。

  假如我们有一个需求如下:界面A上面有一个button、一个label。从界面A跳转到界面B,在界面B的输入框中输入字符串,在界面A的label上显示。这是一个典型的反向传值的例子。这个例子的核心是:“在界面B的输入框中输入字符串,在界面A的label上显示”。Block实现反向传值。

  1、在第二个视图控制器的.h文件中定义声明Block属性:

  1. //定义block
  2. @property (nonatomic,copy) void (^NextViewControllerBlock)(NSString *tfText);
复制代码

  1. @interface NextViewController ()

  2. @property (weak, nonatomic) IBOutlet UITextField *inputTF;

  3. @end


  4. - (IBAction)BtnAction:(id)sender {
  5.    
  6.     //判断block是否为空
  7.     if (self.NextViewControllerBlock) {
  8.         self.NextViewControllerBlock(self.inputTF.text);
  9.         
  10.     }
  11.    
  12.     [self.navigationController popViewControllerAnimated:YES];
  13. }
复制代码


  2、在第一个视图中获得第二个视图控制器,并且用第二个视图控制器来调用定义的属性:

  1. @interface AViewController ()
  2. @property (weak, nonatomic) IBOutlet UILabel *nextVCInfoLabel;

  3. @end
复制代码

  1. - (IBAction)btnClicked:(id)sender {
  2.    
  3.     NextViewController *nextVC = [[NextViewController alloc]init];
  4.     nextVC.NextViewControllerBlock = ^(NSString *tfText){
  5.         self.nextVCInfoLabel.text = tfText;
  6.     };
  7.    
  8.     [self.navigationController pushViewController:nextVC animated:YES];
  9. }
复制代码
发表于 2015-12-18 09:27:32 | 显示全部楼层
顶            
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部