@IT·互联网

UIAlertView+AssociatedObject应用

2016-08-07  本文已影响0人  马修王

UIAlertView是我们代码里面最常使用的一个控件之一了,不过在iOS9.0之后就被苹果淘汰了,具体原因不知道,不过使用过UIAlertView的朋友们应该都被UIAlertViewDelegate里的那一窜长长的if..else判断搞的很头疼,特别是一个页面有多个UIAlertView时...

相信每个人可能都有自己相应的解决办法了,使用一个新的类(继承或封装)来将UIAlertView的处理逻辑和初始化代码同步是比较常见的,我接下来就用关联对象在传统使用方式上做小小的修改,代码如下:

先定义关联对象的Key和UIAlertView处理的block变量类型:

static NSString *MW_ALERT_KEY = @"alertView";
typedef void(^AlertAction)(NSInteger);

编写UIAlertView初始化和show并设置关联对象:

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"这个一个关联对象的测试" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
    AlertAction alertActionBlock = ^(NSInteger index){
        if (index == 0) {
            NSLog(@"点击了取消");
        }else if(index == 1){
             NSLog(@"点击了确定");
        }
    };
    objc_setAssociatedObject(alertView, &MW_ALERT_KEY, alertActionBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
    [alertView show];

最后在UIAlertView的回方法中取出block并执行:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    AlertAction alertActionBlock = objc_getAssociatedObject(alertView, &MW_ALERT_KEY);
    alertActionBlock(buttonIndex);
}

是不是发现代码清晰很多,没有弹框的业务处理和定义放在了一起,看代码的时候就容易很多了

上一篇 下一篇

猜你喜欢

热点阅读