iOSBlock学习笔记
来源:互联网 发布:手机淘宝登录没反应了 编辑:程序博客网 时间:2024/06/05 22:41
一、基本语法
定义块的格式如下:
1.定义无参无返回值的块
void (^printStr)(void) = ^(void){ NSLog(@"这是定义无参无返回值的块");}
2定义带参有返回值的块
int (^add)(int,int) = ^(int a,int b){ return a + b;}
3.调用块
printStr();int c = add(3,4) // c = 7
block的基本语法大概就是这样,下面主要讲一讲blcok做为property属性在页面中传值回调的问题。大概就是第一个页面一个label,把第二个页面textfiled中输入的内容传入第一个页面在label上显示,直接上代码
首先在第二个页面.h中定义一个块属性
@property(nonatomic,copy) void (^nextViewControllerBlock) (NSString *text);
.m文件中
- (IBAction)backClicked:(id)sender { //如果块被调用了,则执行 if (self.nextViewControllerBlock) { self.nextViewControllerBlock(self.textFiled.text);//把输入的内容传入块中 } [self.navigationController popViewControllerAnimated:YES];}
然后在第一个ViewController.m中
- (IBAction)nextClicked:(id)sender { UIStoryboard *main = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; NextViewController *nextVc = [main instantiateViewControllerWithIdentifier:@"2"];//这是直接在Storyboard中加载第二个界面,直接alloc init会导致黑屏,具体不多说,我不建议用Storyboard //调用块 nextVc.nextViewControllerBlock = ^(NSString *text){ self.label.text = text;//把回调过来的值显示在label中 }; [self.navigationController pushViewController:nextVc animated:YES];}
之前我一直不懂的是,第一个页面点击了按钮过后,会先执行
nextVc.nextViewControllerBlock = ^(NSString *text){ self.label.text = text;//把回调过来的值显示在label中 };
这段代码,然后我就觉得很奇怪,如果现在就执行了,那是怎么把值传过来的呢?
后来我打断点跟踪,才发现它是先执行了这段代码,也就相当于给这个块赋值,定义了这个块,但这里也只是定义,并没有执行中括号中的内容,只有当调用这个块的时候,才会执行中括号中的内容,也就是当点击了第二个返回按钮,也就是这段代码
if (self.nextViewControllerBlock) { self.nextViewControllerBlock(self.textFiled.text);//把输入的内容传入块中 }
这里的判断就是判断该块是否被定义,如果定义,则调用这个块,并且把值回调过去。
本人愚钝,搞了半天才理解,希望大神指教
1 0
- iOSBlock学习笔记
- iosblock
- iOSBlock的一些理解
- iOSBlock实现传值
- iOSBlock函数声明定义以及调用等
- 学习笔记?
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- 学习笔记
- linq to xml
- HDU 1159 Common Subsequence(LCS)
- 用C#开发TUXEDO客户端(其中有tuxedo的函数说明)
- java 可变参数获取参数名
- 当RxLifecycle遇到MVP 在P中没有Bind怎么破?
- iOSBlock学习笔记
- Bitmap & Texture2D 互转方法搜集
- 关于ListView里面,嵌入Checkbox适配器复用导致的Checkbox混乱问题
- 无法定位的程序入口..位于动态库..dll
- 弹出框定时跳转
- 初次修改sga_target=0的影响
- OC中的NSData类
- Arm汇编学习笔记(四)——Arm的37个寄存器和异常处理
- Selenium 点击button 出现Windows窗口时候Selenium会Hang住!!!