其实本人一也没学习iOS多久,所以希望有大神看到了可以多多指教,一开始学习iOS开发的时候,如果子view里要调用父viewcontroller里的方法,更多的是用delegate,然后去@protocol一个delegate。那时候看到很多block,都觉得很难理解,其实仔细深入想想看,也不是很难的去应用。
(你的需要返回)(^block名字)(你需要传入的类型);
这是对block的定义,比如说:
<pre><code>typedef void(^MyBlock)(NSString *);</code></pre>
这就是定义了一个没有返回类型,传入NSString类型的block,可以用于传值。
我们可以创建两个Viewcontroller,第一个viewcontroller设置一个label,设置tap手势,push到第二个view controller里,第二个设置一个textfield用于输入。然后写一个tap手势pop回去,并且在tap手势里加上 self.block(_textField.text) ,这样就可以把block传回第一个view controller,当然要在第一个view controller里写上:
__weak typeof(self)weak = self;
ovc.block =^(NSString *sting){
weak.label.text = sting;
};
当然,记得block一般都是copy修饰的,所以即使你在后面对block传入的参数改变的时候,block里面的还是不改变的,而且要弱引用下。
<pre><code>- (void)seedMessage:(void(^)(NSString *name))success;</code></pre>
这个方法,带有回调操作的一个方法,相对delegate来说可以省下很多代码,OC自带的很多方法也是block方法,可以试着写写看哦。
谢谢观看,欢迎各位一起探讨,一起学习,一起进步~
网友评论