iOS通过block在两个页面间传值的方法

 更新时间:2016年11月22日 08:50:23   投稿:daisy  
不知道大家有没有发现,在实际开发中使用block的地方特别多,block比delegate和notification有着更简洁的优势,下面这篇文章我们来简单了解一下block在两个页面之间的传值。有需要的朋友们可以参考借鉴,下面来一起学习学习吧。

一、功能需求

在第一个页面中有一个button和一个label,label上默认显示“哈哈”,点击button进入第二个页面。在第二个页面有一个UITextField和一个button2,点击button2回到第一个页面,但同时第一个页面的label上显示的文字修改为刚刚在UITextField写进去的文字。

二、先定义block

在要传值得那个页面定义含有block参数的方法,即在第二个页面的.h文件中定义:

重新定义:typedef void (^ReturnTextBlock)(NSString *showText);

//重新定义block类名 void返回值类型 ReturnTextBlock类名(重命名类名) NSString *showText参数

声明一个block变量:@property (nonatomic, copy) ReturnTextBlock returnTextBlock;

//注:此处声明需要用copy属性,因为block一开始是放在栈上的,只有copy后才会放到堆上。

block的调用方法:- (void)returnText:(ReturnTextBlock)block;

在.m文件中实现

block的调用方法实现代码:- (void)returnText:(ReturnTextBlock)block {

self.returnTextBlock = block;

}

至此,block准备工作已完成。

三、通过block在两个页面间进行传值

在第一个页面,点击button按钮实现跳转到第二个页面并调用第二个页面的block方法。

-(void)FirstBtnPressed

{

//用blockSelf修饰blockSelf.label 避免block块内部_label被循环引用

__weak ViewController *blockSelf = self;

ShowViewController *orderVC=[[ShowViewController alloc]init];

//block返回值(跟代理写法挺类似的,就是语法不同,代理的话是此处是self.delegate=self;)

[orderVC returnText:^(NSString *showText) {

blockSelf.label.text=showText;

}];

[ self presentViewController:orderVC animated: YES completion:nil];

}

在第二个页面.m文件中实现button2按钮的方法

-(void)SecondBtnPressed

{

//只要在变量前面增加__block,在block里面就可以修改该变量的值。当然也有其他方法如添加static等。

[self dismissViewControllerAnimated:YES completion:^{

//在使用block前需要对block指针做判空处理。

//不判空直接使用,一旦指针为空直接产生崩溃。

if (self.returnTextBlock != nil) {

self.returnTextBlock(self.text.text);

NSLog(@"text==%@",self.text.text);

}

}];

}

这样,就可以实现我们想要实现的功能了,很简单吧。

小结

谁要传值谁就定义含有block的参数的方法,在方法内部调用blcok,将要传递的参数给了blcok,blcok跳进实现它要执行代码的'地方'执行代码.传值完成

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

相关文章

  • iOS开发中TabBar再次点击实现刷新效果

    iOS开发中TabBar再次点击实现刷新效果

    这篇文章主要介绍了iOS开发中TabBar再次点击实现刷新效果,实现方法也很简单,需要的朋友可以参考下
    2018-04-04
  • Xcode 8打印log日志的问题小结及解决方法

    Xcode 8打印log日志的问题小结及解决方法

    这篇文章主要介绍了Xcode 8打印log日志的问题小结及解决方法的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • NSMutable 对象的坑解决分析

    NSMutable 对象的坑解决分析

    这篇文章主要为大家介绍了NSMutable 对象的坑解决分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • iOS图片拉伸技巧小结

    iOS图片拉伸技巧小结

    这篇文章主要为大家详细介绍了iOS图片拉伸的技巧,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • iOS10通知框架UserNotification理解与应用

    iOS10通知框架UserNotification理解与应用

    在iOS10系统中,通知被整合进了UserNotification框架,除了使通知的处理脱离了UIApplication,通知功能的相关开发更加结构化与模块化外,还新增开放了许多更加灵活的开发接口,现在,开发者可以为通知定义UI末班,添加媒体附件,需要的朋友可以参考下
    2016-09-09
  • iOS中的音频服务和音频AVAudioPlayer音频播放器使用指南

    iOS中的音频服务和音频AVAudioPlayer音频播放器使用指南

    这里我们要介绍的是AVAudio ToolBox框架中的AudioServicesPlaySystemSound函数创建的服务,特别适合用来制作铃声,下面就简单整理一下iOS中的音频服务和音频AVAudioPlayer音频播放器使用指南:
    2016-06-06
  • IOS实现简易版的QQ下拉列表

    IOS实现简易版的QQ下拉列表

    在我们日常开发中tableView是用的非常多的控件, 无论在新闻应用, 视频, 聊天应用中都广泛使用, 那么今天小编也分享一个用tableView实现的类似QQ界面的下拉列表.效果很简单,有需要的朋友们可以参考借鉴。
    2016-08-08
  • unix 编程进程控制详细介绍

    unix 编程进程控制详细介绍

    这篇文章主要介绍了unix 编程进程控制详细介绍的相关资料,需要的朋友可以参考下
    2017-01-01
  • IOS中手风琴表不能移动的解决方法

    IOS中手风琴表不能移动的解决方法

    本文给大家分享的是IOS开发中遇到的一个手风琴特效无法正常工作的问题的解决方法,经过度娘了很久才找到解决方法,这里推荐给大家,有需要的小伙伴可以参考下。
    2015-05-05
  • iOS 正则表达式详解

    iOS 正则表达式详解

    在ios中系统自带的正则表达式用法大家都很清楚吧,除了正则可以用还有NSScanner这个类,下面小编给大家简单介绍下
    2016-08-08

最新评论