在上篇博客 《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属性:

//定义block
@property (nonatomic,copy) void (^NextViewControllerBlock)(NSString *tfText);
@interface NextViewController ()

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

@end

- (IBAction)BtnAction:(id)sender {

    //判断block是否为空
if (self.NextViewControllerBlock) {
self.NextViewControllerBlock(self.inputTF.text); } [self.navigationController popViewControllerAnimated:YES];
}

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

@interface AViewController ()
@property (weak, nonatomic) IBOutlet UILabel *nextVCInfoLabel; @end
- (IBAction)btnClicked:(id)sender {

    NextViewController *nextVC = [[NextViewController alloc]init];
nextVC.NextViewControllerBlock = ^(NSString *tfText){
self.nextVCInfoLabel.text = tfText;
}; [self.navigationController pushViewController:nextVC animated:YES];
}

效果如图:

由于本文用的是XIB,省略了部分UI细节,附上本文的代码链接:源码

哪里写的不好,望评论指点。谢过~

iOS Block界面反向传值的更多相关文章

  1. iOS Block界面反向传值小demo

    1.在第二个视图控制器的.h文件中定义声明Block属性: // 定义block @property (nonatomic, copy) void (^NextViewControllerBlock) ...

  2. IOS- 最简单的反向传值- block

    block 常用于反向传值 声明 返回值类型 (^block)(参数列表) 调用 闭包的名字=^(参数列表){}: 闭包的名字(): 如: void(^aaaaa)(int num,NSString ...

  3. 使用block进行界面之间的反向传值

    目标:在两个独立的控制器的界面之间进行反向传值 关键技术:block 代码编写及运行环境:Xcode6.4 / 模拟器8.4 语言:Objective-C 注:使用纯代码实现,不使用xib/story ...

  4. iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)

    iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)   使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: ...

  5. IOS Block 反向传值

    1.在需要像上一个界面传值的.h 文件实现代理方法 @property (nonatomic, copy) void(^isOpenHandler)(BOOL) ; 2.在执行操作的时候需要江操作的结 ...

  6. iOS 再谈 代理传值,block反向传值

    本贴的例子是:有A和B两个界面,要实现的效果就是先让A跳转到B,然后B中有个颜色的参数,当B跳转到A时,把这个颜色的参数传递给A,在A中利用这个颜色改变自己界面的颜色. 第1步:在发送者(界面B)中, ...

  7. iOS 代理反向传值

    在上篇博客 iOS代理协议 中,侧重解析了委托代理协议的概念等,本文将侧重于它们在开发中的应用. 假如我们有一个需求如下:界面A上面有一个button.一个label.从界面A跳转到界面B,在界面B的 ...

  8. 代理和block反向传值

    代理传值: // SendViewController.h #import <UIKit/UIKit.h> @protocol SendInFor <NSObject> -(v ...

  9. block 反向传值回调

    /** *  block 反向传值回调 */ //在第二个控制器中 //   (1)声明block,在基类中已写好 //   (2)写好传值方法 //(1) typedef void (^Return ...

随机推荐

  1. Security7:View Usage

    一,在Database level上,主要有 sys.database_principals, sys.database_permissions 和 sys.database_role_members ...

  2. CSS系列:CSS选择器

    选择器(selector)是CSS中很重要的概念,所有HTML语言中的标记样式都是通过不同的CSS选择器来控制的.用户只需要通过选择对不同的HTML标签进行选择,并赋予各种样式声明,即可实现各种效果. ...

  3. The network bridge on device VMnet0 is not running

    The network bridge on device VMnet0 is not running. The virtual machine will not be able to communic ...

  4. JavaScript中的日期处理注意事项

    在业务逻辑比较多的系统里面,一般都会涉及到日期的处理.包括选择起始日期和结束日期,结束日期要大于起始日期,日期的显示和输入等. 输入这一块基本都是使用jQuery datetimepicker,后来系 ...

  5. MySQL学习笔记三:库和表的管理

    1.MySQL数据库服务配置好后,系统会有4个默认的数据库. information_schema:虚拟对象,其对象都保存在内存中 performance_schema:服务器性能指标库 mysql: ...

  6. 如何用Excel直接查询Oracle中的数据

    将Oracle中查询的数据保存为Excel文件,通常使用的是PL/SQL Developer. 其实,Excel可直接写SQL语句查询Oracle中数据,在这里,用到ODBC驱动.详细步骤如下: 一. ...

  7. GROUP BY的扩展

    GROUP BY的扩展主要包括ROLLUP,CUBE,GROUPING SETS三种形式. ROLLUP rollup相对于简单的分组合计增加了小计和合计,解释起来会比较抽象,下面我们来看看具体事例. ...

  8. 小菜学习Winform(一)贪吃蛇

    前言 说到贪吃蛇,大家可能小时候都玩过,小菜最近在整理Winfrom的学习系列,那我觉得有兴趣才会有学习,就从这个小游戏讲起吧. 实现 其实我刚开始学习编程的时候,感觉写个贪吃蛇的程序会很难,因为涉及 ...

  9. Git代码管理工具

    Git代码管理工具 Git 是分布式的源代码管理工具,这点区别于svn -让源代码可以被追溯,主要是记录了每次的更新了什么,如果新版本不想用,那么则可以退回之前的版本 -Git 是Linux之父当年为 ...

  10. 关于 android 的 view.getLeft(), getRight(), getTop(), getBottom() 的一些疑惑(坑)解答

    (原创) 今天在做下滑刷新的时候碰到 view 的四个 get 函数有点特别,具体遇到的问题如下,经反复测试和查找资料,填坑如下: 1,为什么我有时候在使用getLeft(), getRight(), ...