1. 程式人生 > >iOS 簡單使用Block回撥

iOS 簡單使用Block回撥

建立兩個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];
}

1

2

3