iOS 簡單使用Block回撥
阿新 • • 發佈:2019-01-23
建立兩個ViewController,RootViewController和FirstViewController,將RootViewController設為根檢視
//FirstViewController.h
#pragma mark -知識點 block回撥第一步:重定義block型別
//將系統現有的型別定義一個別名 : typedef NSInteger INT;
//FirstBlock 是別名,等同void(^)(UIColor *color)
typedef void(^FirstBlock)(UIColor *color);
@interface FirstViewController : UIViewController
#pragma mark -知識點 block回撥第二步:宣告方法,將block作為方法的引數封裝到方法中
- (void)changeColorWithString:(NSString *)string block:(FirstBlock)block;
//定義block屬性
//********特別注意:block屬性必須要用copy修飾,retain和assign無效
@property (nonatomic, copy)FirstBlock myBlock;
@end
//FirstViewController.m
- (void)dealloc
{
Block_release(_myBlock); //釋放block
[super dealloc];
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor whiteColor];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.backgroundColor = [UIColor brownColor];
[btn addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside];
btn.frame = CGRectMake(100, 100, 50, 50);
[self.view addSubview:btn];
[btn setTitle:@"pop" forState:UIControlStateNormal];
}
- (void)action:(UIButton *)btn{
//執行block
self.myBlock([UIColor purpleColor]);
[self.navigationController popViewControllerAnimated:YES];
}
#pragma mark -知識點 block回撥第三步:實現方法
- (void)changeColorWithString:(NSString *)string block:(FirstBlock)block{
self.navigationItem.title = string;
//給屬性賦值
self.myBlock = block;
}
//RootViewController.m (引入FirstViewController標頭檔案)
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor cyanColor];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.backgroundColor = [UIColor brownColor];
[btn addTarget:self action:@selector(action:) forControlEvents:UIControlEventTouchUpInside];
btn.frame = CGRectMake(100, 100, 50, 50);
[self.view addSubview:btn];
[btn setTitle:@"push" forState:UIControlStateNormal];
}
- (void)action:(UIButton *)btn{
FirstViewController *firstVC = [[FirstViewController alloc] init];
//push時隱藏掉tabbar
firstVC.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:firstVC animated:YES];
#pragma mark -知識點 block回撥第四步:呼叫方法,實現block
[firstVC changeColorWithString:@"第二頁" block:^(UIColor *color) {
//接收回調回來的值
self.view.backgroundColor = color;
}];
[firstVC release];
}