iOS Block界面反向传值

在上篇博客 《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细节,附上本文的代码链接:源码

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

时间: 2024-10-24 09:51:51

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

iOS Block界面反向传值小demo

1.在第二个视图控制器的.h文件中定义声明Block属性: // 定义block @property (nonatomic, copy) void (^NextViewControllerBlock)(NSString *tfText); @interface NextViewController () @property (weak, nonatomic) IBOutlet UITextField *inputTF; @end - (IBAction)BtnAction:(id)sender

IOS四种反向传值的方法

方法一:使用target-action设计模式 代码如下:(由根视图推出子视图,再由子视图推出根视图,在推出根视图时,子视图传一个color的属性给根视图,用来修改根视图的背景颜色) 根视图控制器代码: //.m文件 - (void)viewDidLoad {     [super viewDidLoad];          self.view.backgroundColor = [UIColor redColor];          [self createButton]; } - (vo

ios开发的block反向传值

block 的反向传值,一直以来都是copy, 今天写出来用来加深印象, 也给一些懒哥们copy的方便些.不多说,直接上代码. #import <UIKit/UIKit.h> //第一步(第二个页面.h) typedef void (^secondVcBlock)(NSString*); @interface SecondViewController : UIViewController //第二步(第二个页面.h)声明一个属性 @property(nonatomic,copy)secondV

block 代码块 反向传值

block 代码块 也称作闭包 与C语言函数类似  具有反向传值.回调的功能 block公式分两种: ①声明和实现写到一块的公式 返回值类型(^block名字)(参数列表 参数类型 参数名) = ^(参数列表 参数类型 参数名){ 实现代码(如果有返回值 需要return 返回值类型的值) }; 调用:block名字(参数); ②声明和实现分开写的公式 (1)声明 返回值类型(^block名字)(参数列表); (2)实现 block名字 = ^(参数列表){ 实现代码(如果有返回值 需要retu

iOS反向传值--Block方法

RootViewController代码如下: #import "RootViewController.h" #import "MyControl.h" #import "SecondViewController.h" #define kDebugPrint NSLog(@"%s",__func__) @interface RootViewController () {     UILabel *_label; } @end

IOS Block 反向传值

1.在需要像上一个界面传值的.h 文件实现代理方法 @property (nonatomic, copy) void(^isOpenHandler)(BOOL) ; 2.在执行操作的时候需要江操作的结果反向传值给上个界面的时候调用Block if (self.isOpenHandler) { self.isOpenHandler(YES); } 3.在第一个视图控制器中 Push 的时候调用Block   接受回传回来的值 WM.isOpenHandler = ^(BOOL isopen){ i

iOS 代理反向传值

在上篇博客 iOS代理协议 中,侧重解析了委托代理协议的概念等,本文将侧重于它们在开发中的应用. 假如我们有一个需求如下:界面A上面有一个button.一个label.从界面A跳转到界面B,在界面B的输入框中输入字符串,在界面A的label上显示.这是一个典型的反向传值的例子.这个例子的核心是:"在界面B的输入框中输入字符串,在界面A的label上显示".也就是说:"界面B委托界面A显示字符串,页面A是界面B的代理".委托方向代理方反向传值. 那么我们该怎么用代理设

ios block传值

iOS开发中的页面传值方式有很多种,最常见的是代理和属性传值方法,不过,block也可以传值,而且在一些特定的场合中,block传值会更简单,下面是一个我写的一个demo,大家可以参考一下. 在#import "AppDelegate.h"中,代码如下: 在第一个控制器中代码如下: 在第二个控制器的.h文件中代码如下: 在第二个控制器的.m文件中代码如下 以上就完成相应的两个界面之间的传值 版权声明:本文为博主原创文章,未经博主允许不得转载.

ios 得用代理反向传值

应用场景:有时时候从界面A跳转到界面B,界面B在返回的时候需要将处理的结果传递给A. 实现思路:1,定义一个负责传值的协义,界面A拥有该协义属性,并实现该协义中的方法 2,界面B也拥有该协义属性(代理要求两者都具有相同对象的引用 ),然后在返回的时候获取界面A的引用指针,并且指定B中协义的调用目标为A,调用协义中的传值方法. 具体代码: A的头文件 : #import <UIKit/UIKit.h> @protocol passValueDelegate <NSObject> -(