Block传值讲解与使用

需求:在FirstViewController中点击"接收"按钮接收来自SecondViewController的block传递的值

步骤如下:

1.在SecondViewController .h文件中声明block

 1 #import <UIKit/UIKit.h>
 2
 3 //为要声明的Block重新定义了一个名字myBlock
 4 typedef void (^myBlock)(NSString *str);// 一会要传的值为NSString类型
 5
 6 @interface SecondViewController : UIViewController
 7 // 声明block属性
 8 @property (nonatomic, copy) myBlock block;
 9 // 声明block方法
10 - (void)getStr:(myBlock)block;
11
12 @end

2.在SecondViewController .m文件中实现 - (void)getStr:(myBlock)block方法

 1 #import "SecondViewController.h"
 2 @interface SecondViewController ()
 3
 4 @end
 5
 6 @implementation SecondViewController
 7
 8 - (void)viewDidLoad {
 9     [super viewDidLoad];
10
11 }
12
13 - (void)getStr:(myBlock)block {
14
15     //把传进来的Block块保存实例变量block中(SecondViewController.h中定义的属性)
16     self.block = block;
17
18     //使用block要要确定其不为nil
19     if (self.block != nil) {
20         self.block(@"要传给FirstViewController的字符串");
21     }
22 }
23
24 @end

3.FirstViewController.m文件 中接收SecondViewController.mblock传来的值

 1 #import "FirstViewController.h"
 2 #import "SecondViewController.h"
 3
 4 @interface FirstViewController ()
 5 @property (nonatomic, strong) SecondViewController *secondVc;
 6 @end
 7
 8 @implementation FirstViewController
 9
10 - (void)viewDidLoad {
11     [super viewDidLoad];
12
13     //先拿到第二个控制器
14     SecondViewController *secondVc = [[SecondViewController alloc]init];
15     _secondVc = secondVc;
16
17     //添加获取字符串按钮
18     [self addGetStrBtn];
19
20 }
21
22 - (void)addGetStrBtn {
23     UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(150, 250, 50, 40)];
24     [self.view addSubview:btn];
25     [btn setTitle:@"获取" forState:UIControlStateNormal];
26     btn.backgroundColor = [UIColor redColor];
27     [btn addTarget:self action:@selector(getStr) forControlEvents:UIControlEventTouchUpInside];
28 }
29
30
31 - (void)getStr {
32     [_secondVc getStr:^(NSString *str) {
33         NSString *string = str;
34         NSLog(@"从SecondViewController获取的字符串为:%@",string);
35     }];
36 }
37
38 @end
时间: 2024-10-23 19:21:31

Block传值讲解与使用的相关文章

代理和 block 传值的使用

// // ZYViewController.h // BlockTest // // Created by yejiong on 14/11/2. // Copyright © 2014年 zzz. All rights reserved. // #import <UIKit/UIKit.h> //1.声明一个 delegate 协议. @protocol ZYViewControllerDelegate <NSObject> //声明一个方法用来传值. //返回值表明传值的结果

iOS 页面间传值 之 单例传值 , block 传值

ios 页面间传值有许多,前边已经分享过属性传值和代理传值,今天主要说一下单例传值和 block 传值 单例传值:单例模式一种常用的开发的模式,单例因为在整个程序中无论在何时初始化对象,获取到的都是同一个对象,对象的属性相同,所以可以用来传值. block 传值 与 代理传值相似,主要用于第二个页面向第一个页面传值,block 传值具体步骤: 在第二个页面: 1.声明: block typedef void(^SendMessagerBlock) (NSString *str); 2.创建方法:

属性传值,协议传值,block传值,单例传值四种界面传值方式

一.属性传值 对于属性传值而言,相对于其它的三种 方法来说,是最基础,最简单的一种 方法,但,属性传值 有很大的局限性,因为是适用于第一个界面向第二个界面传 值,第二个向第三个界面传值等等.N界面向N + 1界面传值.而在此基础上,必须知道跳转界面的明确位置及所要传的值的具体类型.在第二个界面中声明所要传值 类型的属性. @interface SecondViewController : UIViewController //声明一个字符串属性来保存第一个界面传过来的字符串内容 @propert

IOS传值--代理传值,block传值,NSNotificationCenter传值

一:利用代理传值,就是利用代理进行通信. 接口文件: #import <Foundation/Foundation.h> @protocol Cdelegate <NSObject> -(void)change:(NSString *)name; @end .h文件 @interface ViewController : UIViewController<Cdelegate> .m文件 - (IBAction)pushBB:(id)sender { BViewContr

block传值

block传值,布布扣,bubuko.com

页面传值:属性,协议,Block传值

1.属性传值和协议传值 1 #import "RootViewController.h" 2 #import "SecondViewController.h" 3 #warning 第四步:签订协议 4 @interface RootViewController ()<SecondViewControllerDelegate> 5 @property(nonatomic,strong)UILabel *showTextLable; 6 @end 7 8

iOS开发——UI篇&amp;代理/通知/Block传值(实现UItableView分组的收缩与展开)

代理/通知/Block传值实现UItableView分组的收缩与展开 初始化之后出现下面的界面 准备: 1:定义一个BOOL值用来记录点击 1 @property (nonatomic, assign, getter = isOpen) BOOL open; 2:在相应的点击方法里面是实现点击 1 self.group.open = !self.group.open; 3:在numberOfRowsInSection中返回的时候使用三木判断是否点击,并且实现伸缩与展开, 1 return mod

IOS笔记047-代理传值和block传值

在两个不同的控制器之间传递数据,可以使用代理传值或者block传值. 例子是一个简单通讯录. 主界面如下: 添加联系人界面 查看/编辑联系人界面:默认是查看模式,点击编辑后进入编辑模式 编辑模式 数据更新成功. 其中添加联系人界面的数据传递使用代理方式实现. 编辑联系人界面的数据传递使用block实现. 下面来看具体过程 1.整个界面搭建 在storyboard里拖拽四个控制器,其中联系人界面是一个UITableView.界面之间的跳转使用代码实现,但是要给每一个控制器指定一个标识.按功能分别指

属性传值 Block传值

属性传值 就是将A页面的数据传到B页面上,下面就是将FirstViewController的TextField的内容传递到SecondViewController页面的导航栏标题和控制台输出上 #import @interface FirstViewController :UIViewController { UITextField *tf; } @end #import "FirstViewController.h" #import "SecondViewControlle