Block数组作为参数

2016-03-21  本文已影响0人  wu2016

这里先简单举个数组中全是相同类型的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。

这里有个小例子

上一篇 下一篇

猜你喜欢

热点阅读