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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)