iOS基础 - block分别用作属性、参数时实现页面传值

▶ 页面传值

下面代码中,通过 SecondViewController 向 ViewController 传值

// - SecondViewController.h

复制代码
#import <UIKit/UIKit.h>
typedef void(^TextBlockSecVC)(NSString *textString);// textString 是所要传出的值
@interface SecondViewController : UIViewController
/* 属性传值步骤
   1 在传值页面 SecondViewController 中声明 block 属性
   2 在接收传值的页面 ViewController  中书写 block 具体实现
   3 在传值页面 SecondViewController 中调用 block
*/
// 使用属性的好处:可实现 block 在方法外部的调用
@property (strong,nonatomic)TextBlockSecVC textblock;
//------------------------------------------
/* 参数传值:同样地先把 block 搞成属性
   1 在传值页面 SecondViewController 声明自带 block 参数的方法
   2 在接收传值页面 ViewConreooler 中调用该方法,并书写 block 的具体实现
   3 在传值页面 SecondViewController 中实现方法,进行 block 传值
*/
-(void)getTextStringWithBlock:(TextBlockSecVC )block;
@end
复制代码

// - SecondViewController.m 

复制代码
 1 #import "SecondViewController.h"
 2 @interface SecondViewController ()
 3 @property(nonatomic,strong)UITextField *valueTF;// 存放将要传出的值
 4 @end
 5 
 6 @implementation SecondViewController
 7 
 8 - (void)viewDidLoad {
 9     [super viewDidLoad];
10     self.view.backgroundColor = [UIColor whiteColor];
11 
12     // TextField 用来输入将要传出的值
13     self.valueTF = [[UITextField alloc] init];
14     self.valueTF.frame = CGRectMake((self.view.frame.size.width - 210)*0.5, 260, 210, 45);
15     self.valueTF.layer.cornerRadius = 4.0f;
16     self.valueTF.backgroundColor = [UIColor brownColor];
17     self.valueTF.textColor = [UIColor blackColor];
18     self.valueTF.placeholder = @"输入将要传出的值";
19     [self.view addSubview:self.valueTF];
20 }
21 
22 //---------------- 属性传值 -----------------
23 -(void)dealloc{
24     self.textblock(self.valueTF.text);// 传值
25 }
26 
27 //---------------- 参数传值 -----------------
28 // 在方法外部 回调block
29 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
30     
31     if(self.textblock){
32         self.textblock(self.valueTF.text);
33     }
34 }
35 
36 // 方法的实现,并进行 block回调传值
37 -(void)getTextStringWithBlock:(TextBlockSecVC)block{
38 
39     // 方式一
40     if(block){
41         block(@"默认传出的值");// 在方法内部直接回调
42     }
43     
44     // 方式二:在方法外部调用 block
45     self.textblock = block; // 复兴赋值
46 }
47 
48 @end
复制代码

// - ViewController.m

复制代码
 1 #import "ViewController.h"
 2 #import "SecondViewController.h"
 3 
 4 @implementation ViewController
 5 
 6 - (void)viewDidLoad {
 7     [super viewDidLoad];
 8     self.view.backgroundColor = [UIColor brownColor];
 9 }
10 
11 // 进入下一页
12 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
13     __weak ViewController *myself = self;
14     SecondViewController *secVC = [[SecondViewController alloc] init];
15 
16     //--------------------- 属性传值 --------------------
17     // 书写 block 的实现
18     secVC.textblock  = ^(NSString *textString) {
19         NSLog(@"block属性 传值:%@",textString);
20     };
21 
22     //--------------------- 参数传值 ---------------------
23     // 调用方法;方法中的 block代码块 就是 block 的具体实现
24     [secVC getTextStringWithBlock:^(NSString *textString) {
25         NSLog(@"getTextStringWithBlock:%@",textString);
26     }];
27     [self.navigationController pushViewController:secVC animated:NO];
28 }
29 
30 @end
复制代码

 

posted on   低头捡石頭  阅读(44)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示