我们经常用到回调,到底什么是回调函数呢?
回调函数就是由申明函数的类调用函数,而实现却在另一个类中。事实上,通知,block,代理虽然名字不一样但是原理都一样,都是利用回调的机制。
下面就一起了解下block的回调,以block在两个控制器之间的回调传值为例:
首先我们创建一个视图控制器myViewController
我们在控制器中自定义一个block ,代码如下:
#import <UIKit/UIKit.h>
typedef void (^ReturnTextBlock)(NSString *showText);
@interface myViewController : UIViewController
@property(strong,nonatomic)ReturnTextBlock textblock;//申明block
//- (void)returnText:(ReturnTextBlock)block;
@end
#import "myViewController.h"
@interface myViewController ()
@end
@implementation myViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor=[UIColor whiteColor];
UIButton*btn=[UIButton buttonWithType:UIButtonTypeCustom];
btn.frame=CGRectMake(100, 100, 30, 30);
btn.backgroundColor=[UIColor blueColor];
[btn addTarget:self action:@selector(btnClicked) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
}
-(void)btnClicked
{
self.textblock(@"传值到另外一个控制器");//调用block
[self dismissViewControllerAnimated:YES completion:nil];
}
下面看看block的实现在哪里,他在另外一个控制器中
- (IBAction)ValueSend:(id)sender {
myViewController*my=[myViewController new];
my.textblock=^(NSString *showText) {
[self.textbtn setTitle:showText forState:UIControlStateNormal];//相当于block的实现,显示在btn上
};
[self presentViewController:my animated:YES completion:nil];
}