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

使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值:

先说一下思想:

首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButton,其中UILabel是为了显示第二个视图控制器传过来的字符串,UIButton是为了push到第二个界面。

第二个界面的只有一个UITextField,是为了输入文字,当输入文字,并且返回第一个界面的时候,当第二个视图将要消失的时候,就将第二个界面上TextFiled中的文字传给第一个界面,并且显示在UILabel上。

其实核心代码就几行代码:

下面是主要代码:(因为我是用storyBoard创建的工程,所以上面的属性和相应的方法,是使用系统生成的outlet)

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

 


1

2

3

4

5

6

7

8

9

typedef void (^ReturnTextBlock)(NSString *showText);

@interface TextFieldViewController : UIViewController

@property (nonatomic, copy) ReturnTextBlock returnTextBlock;

- (void)returnText:(ReturnTextBlock)block;

@end

第一行代码是为要声明的Block重新定义了一个名字


1

    ReturnTextBlock

这样,下面在使用的时候就会很方便。

第三行是定义的一个Block属性

第四行是一个在第一个界面传进来一个Block语句块的函数,不用也可以,不过加上会减少代码的书写量

二、实现第二个视图控制器的方法


1

2

3

4

5

6

7

8

9

- (void)returnText:(ReturnTextBlock)block {

    self.returnTextBlock = block;

}

- (void)viewWillDisappear:(BOOL)animated {

    

    if (self.returnTextBlock != nil) {

        self.returnTextBlock(self.inputTF.text);

    }

}

其中inputTF是视图中的UITextField。

第一个方法就是定义的那个方法,把传进来的Block语句块保存到本类的实例变量returnTextBlock(.h中定义的属性)中,然后寻找一个时机调用,而这个时机就是上面说到的,当视图将要消失的时候,需要重写:


1

- (void)viewWillDisappear:(BOOL)animated;

方法。

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

如下方法中书写:


1

2

3

4

5

6

7

8

9

10

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

    // Get the new view controller using [segue destinationViewController].

    // Pass the selected object to the new view controller.

    TextFieldViewController *tfVC = segue.destinationViewController;

    

    [tfVC returnText:^(NSString *showText) {

        self.showLabel.text = showText;

    }];

}

可以看到代码中的注释,系统告诉我们可以用[segue destinationViewController]来获得新的视图控制器,也就是我们说的第二个视图控制器。

这时候上面(第一步中)定义的那个方法起作用了,如果你写一个[tfVC returnText按回车 ,系统会自动提示出来一个:

tfVC returnText:<#^(NSString *showText)block#>

的东西,我们只要在焦点上回车,就可以快速创建一个代码块了,大家可以试试。这在写代码的时候是非常方便的。

转自:http://winann.blog.51cto.com/4424329/1438480?utm_source=tuicool

时间: 2024-10-12 12:54:27

iOS开发:使用Block在两个界面之间传值(Block高级用法:Block传值)的相关文章

iOS开发UI篇—推荐两个好用的Xcode插件(提供下载链接)

iOS开发UI篇—推荐两个好用的Xcode插件(提供下载链接) 这里推荐两款好用的Xcode插件,并提供下载链接. 一.插件和使用如下: 1.两款插件 对项目中图片提供自动提示功能的插件:KSImageNamed-Xcode-master 提供快速创建自动注释:VVDocumenter-Xcode-master 2.使用介绍: (1)KSImageNamed-Xcode-master的使用 安装该插件后,会对文件中图片进行智能提示. (2)VVDocumenter-Xcode-master能提供

ios开发-UI基础-应用管理(单纯界面)

功能分析 以九宫格的形式展示应用信息 点击下载按钮后,做出相应操作(弹出一个提示"正在下载",相应应用的下载按钮变为"已下载") 步骤分析 搭建UI界面 加载应用信息 根据应用的个数创建对应的view 监听下载按钮的点击 应用截图: 这个小的综合实例涉及到的知识点: UIView的常见属性和方法 九宫格的计算方法 字典转模型 xib的使用 view的封装 简单的MVC 九宫格分析: 搭建九宫格的步骤 明确每一块用的是什么view 明确每个view之间的父子关系 先尝

使用block实现两个页面之间的传统价值观

第二个view声明一个block属性: @property (nonatomic, copy) void(^doTransferMsg)(NSString *_msg); 然后传值方法里检查block是不是存在 - (IBAction)transferText:(UIButton *)sender { if (_doTransferMsg) { _doTransferMsg(@"hello there"); _doTransferMsg = nil; } [self.navigatio

iOS开发日记59-推荐两本好书

年前一直在加班赶项目,断更一月有余,新年将至,在这里祝各位看官新年快乐,大吉大利 在这里推荐两本好书,是博主准备年假期间学习的,斟酌了许久,买了这两本,确实是非常好的进阶书,推荐给大家 1.OC高级编程:一本面向iOS中级开发者的书,这本书只有三章,分别是内存管理,Block和GCD.但是书中详细的讲解了三者的底层实现,告诉你苹果源代码不会告诉你的实战经历 2.iOS网络高级编程:一本面向iOS中级开发者的,网络编程的好书,书中章节很多,就不在这里一一赘述了,书中非常详细的为我们讲述了网络编程相

ios开发-UI基础-应用管理(单纯界面)改进2

本篇文章,通过字典转模型来改进上篇文章中的代码. 字典转模型,之前的文章已经介绍过,这里再重复一下:  字典转模型 字典:用来存储数据的,用键值对存储数据,是一个nsdictionary ,(不好处:key值容易写错) 模型: 用来存储数据的,一个字典对应一个模型,模型用属性来存储数据,是一个纯洁的object对象 @property(nonatomic,copy)NSString *name; @property(nonatomic,copy)NSString *icon; 字典转模型:一个字

ios开发-UI基础-应用管理(单纯界面)改进5-使用代理实现监听下载按钮的点击(delegate)

[注意]转载时请注明出处博客园-吃唐僧肉的小悟空http://www.cnblogs.com/hukezhu/ 前几篇文章介绍了一个应用管理的小应用,从最开始的单纯实现功能,一步一步就行改进\封装,上篇文章是使用xib进行了优化,本篇文章使用代理实现监听下载按钮的点击. 在原来的基础上,使用代理的主要思路分析: 首先要新建一个协议 声明协议的要实现的方法(一般为optional) 声明一个遵守该协议的代理的属性 使用代理,通知其代理完成操作 在代理中的实现步骤: 遵守协议 设置代理(一般通过拖线

ios开发-UI基础-应用管理(单纯界面)改进4-xib封装

[注意]转载请注明出处:吃唐僧肉的小悟空http://www.cnblogs.com/hukezhu/ 上篇文章结尾介绍了一下为什么要对xib进行封装,这里不再赘述. 大体整理了一下封装的思路(我自己的想法,可能不是很清晰): 为了扩展,将xib的代码封装,创建一个类,来描述xib >在新建的.m文件中,新建一个类扩展(类似于viewController) >在新建的.h文件中,加入一个模型的属性(@class) >在新建的.m文件中,重写模型的set方法(在.h文件中已经加入了,自动生

iOS开发——项目需求-快速回到当前界面的顶部

利用UIWindow实现快速到达顶部 如下图,在状态栏添加一个没有颜色的UIWindow(里面添加一个按钮),实现点击这个按钮时能快速的回到当前界面的顶部 核心代码 一.利用UIWindow实现到达顶部1.创建一个新的窗口 1)UIWindow的级别,级别越高,越显示在上层(级别高的window盖在级别低的window上面) UIWindowLevelNormal < UIWindowLevelStatusBar < UIWindowLevelAlert @interface AppDeleg

iOS开发——UI_swift篇&amp;TableView自定义聊天界面

TableView自定义聊天界面 1,下面是一个放微信聊天界面的消息展示列表,实现的功能有: (1)消息可以是文本消息也可以是图片消息 (2)消息背景为气泡状图片,同时消息气泡可根据内容自适应大小 (3)每条消息旁边有头像,在左边表示发送方,在右边表示接收方 2,实现思路 (1)需要定义一个数据结构保存消息内容 MessageItem (2)继承UITableViewCell实现自定义单元格,这里面放入头像和消息体 (3)继承UITableView实现自定义表格,通过读取数据源,进行页面的渲染