iOS 使用Block进行逆传值

跟通知一样也是两个控制器,然后代码创建控件直接上代码

#import "ViewController.h"

#import "TwoViewController.h"

@interface ViewController ()

{

UIButton *_nextBtn;

UILabel *_showLabel;

}

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

[self show];

}

-(void)show{

_nextBtn = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];

[_nextBtn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

[_nextBtn setTitle:@"下一个" forState:UIControlStateNormal];

[_nextBtn addTarget:self action:@selector(nextBtnClick:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:_nextBtn];

_showLabel = [[UILabel alloc]initWithFrame:CGRectMake(100, 300, 100,50)];

[_showLabel setBackgroundColor:[UIColor greenColor]];

[_showLabel setTextColor:[UIColor redColor]];

[self.view addSubview:_showLabel];

}

-(void)nextBtnClick:(UIButton *)nextBtnClick{

TwoViewController * two = [[TwoViewController alloc]init];

two.block = ^(NSString * str){

_showLabel.text = str;

};

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

}

在TwoViewController.h中

#import <UIKit/UIKit.h>

typedef void (^MyBlock)(NSString *);

@interface TwoViewController : UIViewController

@property(nonatomic,copy)MyBlock block;

@end

在TwoViewController.m中

#import "TwoViewController.h"

@interface TwoViewController ()

{

UIButton *_backBtn;

UITextField *_textField;

}

@end

@implementation TwoViewController

- (void)viewDidLoad {

[super viewDidLoad];

self.view.backgroundColor = [UIColor blueColor];

[self shoulabel];

}

-(void)shoulabel{

_backBtn = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];

_backBtn.backgroundColor = [UIColor redColor];

[_backBtn setTitle:@"shang" forState:UIControlStateNormal];

[_backBtn addTarget:self action:@selector(shangBtnClick:) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:_backBtn];

_textField = [[UITextField alloc]initWithFrame:CGRectMake(100, 400, 250, 35)];

_textField.backgroundColor = [UIColor yellowColor];

[self.view addSubview: _textField];

}

-(void)shangBtnClick:(UIButton *)shangBtn{

[self dismissViewControllerAnimated:YES completion:^{

if (self.block) {

self.block(_textField.text);

}

}];

}

这样就进行了简单的传值

时间: 2024-10-12 15:28:43

iOS 使用Block进行逆传值的相关文章

iOS 页面间几种传值方式(属性,代理,block,单例,通知)

iOS 页面间几种传值方式(属性,代理,block,单例,通知) 姜糖水 2015-05-03 52 阅读 iOS 移动开发 第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值.block传值 那么第一个视图控制器如何获的第二个视图控制器的部分信息 例如:第一个界面中的lable显示第二个界面textField中的文本 这就需要使用代理传值 页面间传值有八大传值方式,下面我们就简单介绍下页面间常用的五

iOS中block用法之两个界面传值问题

Block的使用有很多方面,其中传值只是它的一小部分,但是很常用更实用,下面介绍Block在两个界面之间的传值用法: 先说一下思想: 首先,创建两个视图控制器,在第一个视图控制器中创建一个Label和一个Button,其中Label是为了显示第二个视图控制器传过来的字符串, Button是为了push到第二个界面. 第二个界面的只创建一个TextField,是为了输入文字,当输入文字并且返回第一个界面的时候(第二个视图将要消失的时候),就将这个 TextFiled中的文字传给第一个界面并且显示在

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有很多方面的用途,

iOS利用通知逆传值

直接创建两个控制器,点击跳转第二个界面,然后点击按钮进行传值 #import "ViewController.h" #import "TWOOViewController.h" @interface ViewController () @property(nonatomic,weak)UILabel * label; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoa

IOS中block的使用方法

X.1 初探Block 在这一小节我们先用一些简单范例来导入block的概念. X.1.1 宣告和使用Block 我们使用「^」运算子来宣告一个block变数,而且在block的定义最后面要加上「;」来表示一个完整的述句(也就是将整个block定义视为前面章节所介绍的简单述句,因为整个定义必须是一个完整的句子,所以必须在最后面加上分号),下面是一个block的范例: 1: int multiplier = 7 ; 2: int (^myBlock)( int ) = ^( int num) 3:

iOS之block浅谈

前言 ios4.0系统已开始支持block,在编程过程中,block被Obj-C看成是对象,它封装了一段代码,这段代码可以在任何时候执行.block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.它和传统的函数指针很类似,但是有区别:block是inline的,并且它对局部变量是只读的. block和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样. block的使用 1.block的定义 // 声明和实现写在一起,就像变量的声明实现 int a

IOS中 Block简介与用法(一)

?Block简介: Block的实际行为和Function很像,最大的差别是在可以存取同一个Scope的变量值.Block实体形式如下: ^(传入参数列){行为主体}; Block实体开头是"^",接着是由小括号所包起来的参数列(比如 int a, int b, int c),行为主体由大括号包起来,专有名字叫做block literal.行为主体可以用return回传值,类型会被compiler自动辨别.如果没有参数列要写成: ^(void). 例如下面的一个例子: [cpp] vi

iOS中block类型大全

iOS中block类型大全 typedef的block 作为属性的block 作为变量的block 作为方法变量入参的block 作为方法参数的block 无名block 内联函数的block 递归调用的block 作为方法返回值的block 作为函数名的block(太过奇葩,完全不知道怎么用-_-!) iOS中block类型大全,码迷,mamicode.com

iOS中block的用法 以及和函数用法的区别

ios中block的用法和函数的用法大致相同 但是block的用法的灵活性更高: 不带参数的block: void ^(MyBlock)() = ^{}; 调用的时候  MyBlock(); 带参数的block: int ^(MyBlock)(int,int) = ^(int a,int b){return a+b;} 调用MyBlock(5,6); 将block当作某个类的属性的写法 typedef void (^BlockOption)(); @property (nonatomic,ass