ios block的使用
2017-03-22 本文已影响154人
风都
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
}
等值替换