这里先简单举个数组中全是相同类型的Block的例子。
先声明一个Block类型
typedef void(^ZCBLOCK)(void);
写一个弹出弹框的方法如下:
//创建一个弹框,可以自行定义有多少个按钮,但是需要传入按钮的title,并且每个按钮都可以定义一个BLOCK放到BLOCK数组中,在BLOCK中做自己想做的事
- (void)showAlertWithTitle:(nullable NSString *)title
AndMessage:(nullable NSString *)message
AndAlertStyle :(UIAlertControllerStyle)style
AndButtonString:(nonnull NSArray *)array
AndBlockArray:(nonnull NSArray<BLOCK> *)blockArray
{
UIAlertController *ZCAlert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:style];
for(int i = 0; i < array.count; i++)
{
UIAlertAction *action = [UIAlertAction actionWithTitle:array[i] style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
if(blockArray[i])
{
blockArray[i]();
}
}];
[ZCAlert addAction:action];
}
[self presentViewController:ZCAlert animated:YES completion:nil];
}
如何调用:
@interface OneViewController ()
@property (nonatomic,copy) ZCBLOCK block1;
@property (nonatomic,copy) ZCBLOCK block2;
@property (nonatomic,copy) ZCBLOCK block3;
@end
可以写在viewDidLoad中:
self.block1 = ^
{
NSLog(@"你好!");
};
self.block2 = ^
{
NSLog(@"好你妹");
};
self.block3 = ^
{
NSLog(@"好啊好");
};
NSArray *array = [NSArray arrayWithObjects:@"你好!",@"好你妹",@"好啊好", nil];
NSArray *arr = [NSArray arrayWithObjects:self.block1,self.block2,self.block3, nil];
[self showAlertWithTitle:@"提示" AndMessage:@"你好" AndAlertStyle:UIAlertControllerStyleAlert AndButtonString:array AndBlockArray:arr];
这样就会弹出一个自己定义个数的弹框,并且每个弹框中都可以自己定义去做什么事情。这个Block数组中也可以放不同类型的Block。
这里有个小例子