iOS利用Block逆向传值的方式详解_IOS

前言

在iOS通过代理逆向传值的方式详解一文中,分析了如何利用代理模式来逆向传值,其实还有一些其他的方式,如通知、Block等,相比较代理,我个人认为反而要简单些,但是需要处理好细节问题,如Block循环引用。还是用前文的案例,本次使用Block来实现,Block的基本知识本文不再赘述。

一、书写规范

Block传值,需要注意的是,谁传值就需要定义Block,捕获方仅仅需要传递Block给传值方,并处理捕获的值。

传值方

     1、定义Block用于传值

     2、声明一个上述Block属性,这个属性的具体实现需要捕获方传进来

     3、在需要传值的时候调用Block完成传值

捕获方

     1、传递一个Block给传值方

     2、在Block中捕获传过来的值,并根据需求处理捕获的值

二、Block与逆向传值

还是那句No Code, No BB,案例效果如下:


逆向传值

三、实现步骤

1、传值方

//.h 文件

/**
 * 类型自定义
 */
typedef void (^ReturnValueBlock) (NSString *strValue);

@interface NextViewController : UIViewController
/**
 * 声明一个ReturnValueBlock属性,这个Block是获取传值的界面传进来的
 */
@property(nonatomic, copy) ReturnValueBlock returnValueBlock;

@end

=================================================================

//.m 文件

#import "NextViewController.h"

@interface NextViewController ()

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

- (IBAction)back:(id)sender;

@end

@implementation NextViewController

- (void)viewDidLoad {

  [super viewDidLoad];

  self.navigationItem.title = @"第二个界面";
}

/**
 * 返回上一个界面
 *
 * @param sender 按钮
 */
- (IBAction)back:(id)sender {

  NSString *inputString = self.inputText.text;

  if (self.returnValueBlock) {
    //将自己的值传出去,完成传值
    self.returnValueBlock(inputString);
  }

  [self.navigationController popViewControllerAnimated:YES];

}

@end

2、捕获方

//.m 文件

#import "ViewController.h"
#import "NextViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UILabel *nextPassedValue;

- (IBAction)next:(id)sender;

@end

@implementation ViewController

- (void)viewDidLoad {

  [super viewDidLoad];

}

//点击按钮跳转到第二个界面
- (IBAction)next:(id)sender {

  NextViewController *nvc = [[NextViewController alloc]init];

  //赋值Block,并将捕获的值赋值给UILabel
  nvc.returnValueBlock = ^(NSString *passedValue){

    self.nextPassedValue.text = passedValue;

  };

  [self.navigationController pushViewController:nvc animated:YES];

}
@end

总结

以上就是这篇文章的全部内容了,希望本文的内容对各位iOS开发者们能有所帮助,如果有疑问大家可以留言交流。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索ios
, block传值
, block逆向传值
ios逆向传值
ios逆向传值、block逆向传值、ios block逆向传值、ios 代理逆向传值、ios的push逆向传值,以便于您获取更多的相关知识。

时间: 2024-10-02 12:33:25

iOS利用Block逆向传值的方式详解_IOS的相关文章

iOS通过代理逆向传值的方式详解_IOS

前言 在iOS开发中,常见的几种逆向传值方式,有代理(delegate).通知(NSNotification),block等等,本文就给大家分析下,如何理解和快速上手代理模式,并以一个简单的逆向传值为案例,看看代理模式是不是很难. 一.代理模式中的几个概念 讲代理模式之前,首先需要弄清楚两个概念:被代理对象和代理对象.并且需要知道它们之间是靠协议关连起来的. 1.被代理对象 被代理对象往往就是真正有做事意图的那个对象,比如卖房子案例中的想卖房子的房主,保姆婴儿案例中想喝奶的婴儿.但是它们自己做不

iOS开发系列--通知与消息机制详解_IOS

概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地通知:另一类是推送通知,也叫远程通知.两种通知在iOS中的表现一致,可以通过横幅或者弹出提醒两种形式告诉用户,并且点击通知可以会打开应用程序,但是实现原理却完全不同.今天就和大家一块去看一下如何在iOS中实现这两种机制,并且在文章后面会补充通知中心的内容避免初学者对两种概念的混淆. 本地通知 本地通

使用Swift代码实现iOS手势解锁、指纹解锁实例详解_IOS

一.手势密码 1. 1.1.用UIButton组成手势的节点. 1.2.当手指接触屏幕时,调用重写的 touchesBegan:withEvent方法(在touchesBegan里调用setNeedsDisplay,这样就会自动调用drawRect方法). 1.3.当手指在屏幕上滑动时,调用重写的touchesEnded:withEvent方法. 这两个方法执行的操作是一样的:通过locationInView获取 触摸的坐标,然后用 CGRectContainsPoint 判断手指是否经过UIB

iOS开发系列--地图与定位源代码详解_IOS

概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个陌生的地方想要查找附近的酒店.超市等就可以打开软件搜索周边;类似的,还有很多团购软件可以根据你所在的位置自动为你推荐某些商品.总之,目前地图和定位功能已经大量引入到应用开发中.今天就和大家一起看一下iOS如何进行地图和定位开发. 定位 地图 定位 要实现地图.导航功能,往往需要先熟悉定位功能,在iO

iOS 项目中的version和build 详解_IOS

iOS 项目中的version和build Version在plist文件中的key是"CFBundleShortVersionString",标识应用程序的发布版本号,和AppStore上的版本号保持一致.该版本的版本号是三个分隔的整数组成的字符串.第一个整数代表重大修改的版本,如实现新的功能或重大变化的修订.第二个整数表示的修订,实现较突出的特点.第三个整数代表维护版本 Build在plist文件中的key是"CFBundleVersion",标示(发布或者未发

iOS中视频播放器的简单封装详解_IOS

前言 如果仅仅是播放视频两者的使用都非常简单,但是相比MediaPlayer,AVPlayer对于视频播放的可控制性更强一些,可以通过自定义的一些控件来实现视频的播放暂停等等.因此这里使用AVPlayer的视频播放. 视频播放器布局 首先使用xib创建CLAVPlayerView继承UIView用来承载播放器,这样我们在外部使用的时候,直接在控制器View或者Cell上添加CLAVPlayerView即可,至于播放器播放或者暂停等操作交给CLAVPlayerView来管理.下面来看一下CLAVP

IOS开发之JSON转PLIST实例详解_IOS

 IOS JSON转PLIST   从xx.json文件中读取JSON数据,写入到xx.plist文件中,实现代码如下: NSString *path = @"/Users/android_ls/Desktop/city_province.json"; NSArray *array = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:path] options:NSJSONReadingMut

IOS 关键字const 、static、extern详解_IOS

IOS 关键字const .static.extern详细介绍: 一.前言 阅读别人的代码(一些优秀的源码)总能发现一些常见的关键字,随着编程经验的积累大部分还是知道是什么意思的,但在概念上和具体的用法上却依然有些模糊,故特意整理汇总了下三个比较常见的关键字--const/static/extern. 二.关键字const/static/extern的释义和用法 1.const 这个单词翻译成中文是"常量"的意思.在程序中我们知道"常量"的值是不能变的,固定的.所以

iOS实现富文本编辑器的方法详解_IOS

前言 富文本编辑器不同于文本编辑器,国内做的比较好的比如有百度的UEditor和kindEditor.但是这两个也有它的缺点:界面过于复杂.不够简洁.UI设计也比较落后.不够轻量化,这篇文章我们将给大家介绍利用iOS如何实现富文本编辑器. 实现的效果 解决思路 采用webview加载一个本地html文件,该html内部编写好js方法用于与oc相互调用 最终输出该富文本字符串传输给服务器 为什么选择这样的方式 服务端要求我最终返回的数据格式为: { @"Id":"当时新建模板这