ios block的使用

1、有一个方法里面包含了动画,需要在点击其他按钮时调用此方法,并且是动画结束之后执行按钮里面的代码

- (void)cancel{
    [UIView animateWithDuration:0.5 animations:^{
                [self dismissViewControllerAnimated:YES completion:nil];
            }];

}

需要在dismiss之后点击按钮,present出一个新的控制器,可以对重新写一个含有block的方法

- (void)cancelWithCompletionBlock:(void(^)())completionBlock{
//                if (completionBlock) {
//                    completionBlock();
//                }
                completionBlock ? completionBlock() : nil; // 装逼写法
}

然后在cancel方法里面调用此方法block传nil;
然后在其他按钮的点击方法里面调用此方法

- (void)buttonClick:(UIButton *)button{
    if (button.tag == 0) {
        [self cancelWithCompletionBlock:^{
            ButtonViewController *viewC = [[ButtonViewController alloc] init];
            [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:viewC animated:YES completion:nil];
        }];
    }
}

或者也可以将block写成属性
@property (copy ,nonatomic) void(^completionBlock)();

至于为什么属性和方法里面的block写法不同

// 定义属性
@property (copy ,nonatomic) void(^completionBlock)();
- (void)setTestView:(UIView *)testView

- (void)setTestView:(void(^)())completionBlock{
// 定义block变量   
void(^block)() = ^{
}
block(); // 调用block
}
等值替换

你可能感兴趣的:(ios block的使用)