开发中实用的AlertViewController 扩展

作者: 不会打滚儿的狮子 | 来源:发表于2019-10-16 10:59 被阅读0次

    原文链接:https://juejin.im/post/5b517e29e51d45194b18f47f

      —— OC 版本
      使用——看起来不像OC
    
    /// ---------- alert  
    UIAlertController.cd_alert
    .cd_title(@"提示")
    .cd_titleFont(font_16())
    .cd_titleColor(color_Txt_1())
    .cd_message(@"123456")
    .cd_messageFont(font_14())
    .cd_messageColor(color_Txt_3())
    .cd_actionCustom(^(UIAlertAction * a){
        a.cd_textColor(color_Main_1());
        a.cd_text(@"点我呀");
        a.cd_style(UIAlertActionStyleCancel);
        a.cd_handler(^(UIAlertAction * a){
            NSLog(@"点击了 点我呀");
        });
    })
    .cd_actionHandler(^(UIAlertAction * b){
        NSLog(@"点击了 啥都没有");
    })
    .cd_action(@"去去去")
    .cd_show();
    /// ---------- sheet
    UIAlertController * sheet = UIAlertController.cd_sheet;
    sheet.cd_actionCustom(^(UIAlertAction * a){
        a.cd_textColor(color_Main_1());
        a.cd_text(@"点我呀");
        a.cd_style(UIAlertActionStyleCancel);
        a.cd_handler(^(UIAlertAction * a){
            NSLog(@"点击了 点我呀");
        });
    })
    .cd_actionCustom(^(UIAlertAction * b){
        b.cd_text(@"什么都没有");
    })
    .cd_action(@"去去去")
    .cd_show();
    // 自定义 UI 插入
    UIButton * button = UIButton.cd_init;
    printf("retain self.al = %ld\n",CFGetRetainCount((__bridge CFTypeRef)(button)));
    button.cd_bgColor([UIColor redColor])
    .cd_cornerRadius(8.0f)
    .cd_masonry(sheet.view, ^(MASConstraintMaker *make) {
        make.left.right.bottom.equalTo(sheet.view);
        make.height.equalTo(@55);
     });
      sheet.cd_hidden();//自动 dismiss
    
    就这么搞 ----- UIAlertController 扩展
    .h
    
    #import <UIKit/UIKit.h>
    
    @interface UIAlertController (CD)
    

    pragma mark ----- 初始化

    /// 初始化 样式 Alert
    + (UIAlertController*)cd_alert;
    /// 初始化 样式 ActionSheet
    + (UIAlertController*)cd_sheet;
    /// 初始化
    + (UIAlertController*)cd_alert:(UIAlertControllerStyle)style;
    #pragma mark ----- 显示
    /// 显示 默认获取顶层 VC
    - (UIAlertController *(^)(void))cd_show;
    /// 显示 传入 vc
    - (UIAlertController *(^)(UIViewController* ))cd_showVC;
    /// 显示  present 完成后 自定义内容 completion
    - (UIAlertController *(^)(UIViewController* vc, void (^block)(void)))cd_showBlock;
    
    #pragma mark ----- 消失
    /// 消失 默认 1.0 秒后
    - (void (^)(void))cd_hidden;
    /// 消失 默认 1.0 秒后 消失后回调 Completion 自定义内容
    - (void(^)(void (^)(void)))cd_hiddenBlock;
    /// 消失 设置延时时间 消失后回调 block 自定义内容
    - (void(^)(NSTimeInterval time, void (^block)(void)))cd_hiddenTimeBlock;
    

    pragma mark ----- 标题样式

    /// 设置标题
    - (UIAlertController *(^)(NSString*))cd_title;
    /// 设置标题字体
    - (UIAlertController *(^)(UIFont*))cd_titleFont;
    /// 设置标题颜色
    - (UIAlertController *(^)(UIColor*))cd_titleColor;
    /// 设置标题 自定义富文本
    - (UIAlertController *(^)(NSAttributedString*))cd_titleAttributed;
    //#pragma mark ----- Msg 样式
    /// 设置副标题
    - (UIAlertController *(^)(NSString*))cd_message;
    /// 设置副标题字体
    - (UIAlertController *(^)(UIFont*))cd_messageFont;
    /// 设置副标题颜色
    - (UIAlertController *(^)(UIColor*))cd_messageColor;
    /// 设置副标题 自定义富文本
    - (UIAlertController *(^)(NSString*))cd_messageAttributed;
    #pragma mark ----- 按钮
    /// 按钮
    - (UIAlertController *(^)(NSString*))cd_action;
    /// 按钮 + 回调
    - (UIAlertController *(^)(void (^)(UIAlertAction *action)))cd_actionHandler;
    /// 按钮 + 自定义 回调包含在内
    - (UIAlertController *(^)(void(^)(UIAlertAction * action)))cd_actionCustom;
    @end
    
    @interface UIAlertAction (CD)
    /// 设置按钮文字
    - (UIAlertAction *(^)(NSString*))cd_text;
    /// 设置按钮 字体色
    - (UIAlertAction *(^)(UIColor*))cd_textColor;
    /// 设置按钮 样式 UIAlertActionStyle
    - (UIAlertAction *(^)(UIAlertActionStyle))cd_style;
    /// 点击回调
    - (UIAlertAction *(^)(void(^handler)(UIAlertAction * _Nonnull action)))cd_handler;
    @end
    

    .m

    #import "UIAlertController+CD.h"
    
    @implementation UIAlertController (CD)
    #pragma mark ----- 初始化
    + (UIAlertController*)cd_alert{
        return [UIAlertController cd_alert:UIAlertControllerStyleAlert];
    }
    + (UIAlertController*)cd_sheet{
    return [UIAlertController cd_alert:UIAlertControllerStyleActionSheet];
    }
    + (UIAlertController*)cd_alert:(UIAlertControllerStyle)style{
    return [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:style];
    }
    

    pragma mark ----- 显示

    - (UIAlertController *(^)(void))cd_show{
    return ^(void){
        self.cd_showBlock(nil,nil);
        return self;
    };
    }
    - (UIAlertController *(^)(UIViewController* ))cd_showVC{
    return ^(UIViewController* vc){
        self.cd_showBlock(vc,nil);
        return self;
    };
    }
    - (UIAlertController *(^)(UIViewController* vc, void (^block)(void)))cd_showBlock{
    return ^id(UIViewController* vc, void (^block)(void)){
        if (!self.title && !self.message && self.actions.count==0) {
            NSLog(@"💀💀大哥!你别这样,什么东西都不放,俺会崩溃的💀💀");
            return nil;
        }
        [vc?vc:cd_MVVMVC() presentViewController:self animated:YES completion:block];
        return self;
    };
    }
    
    #pragma mark ----- 消失
    - (void (^)(void))cd_hidden{
       return ^(void){
       self.cd_hiddenBlock(nil);
    };
    }
    - (void(^)(void (^)(void)))cd_hiddenBlock{
    return ^(void (^block)(void)){
        self.cd_hiddenTimeBlock(1.0,block);
    };
    }
    - (void(^)(NSTimeInterval time, void (^block)(void)))cd_hiddenTimeBlock{
    @weakify(self);
    return ^(NSTimeInterval time,void (^block)(void)){
        @strongify(self);
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            @strongify(self);
            [self dismissViewControllerAnimated:YES completion:block];
        });
    };
    
    }
    #pragma mark ----- Title 样式
    - (UIAlertController *(^)(NSString*))cd_title{
    return ^(NSString* title){
        self.title = title;
        return self;
    };
    }
    - (UIAlertController *(^)(UIFont*))cd_titleFont{
    return ^(UIFont* font){
        if (self.title.length>0) {
            NSAttributedString * attributedMessage = [self valueForKey:@"attributedTitle"];
            NSMutableAttributedString *attributedString;
            if (attributedMessage) {
                attributedString = [[NSMutableAttributedString alloc] initWithAttributedString:attributedMessage];
            }else{
                attributedString = [[NSMutableAttributedString alloc] initWithString:self.title];
            }
            [attributedString addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, attributedString.length)];
            [self setValue:attributedString forKey:@"attributedTitle"];
        }
        return self;
    };
    }
    - (UIAlertController *(^)(UIColor*))cd_titleColor{
    return ^(UIColor* color){
        if (self.title.length>0) {
            NSAttributedString * attributedMessage = [self valueForKey:@"attributedTitle"];
            NSMutableAttributedString *attributedString;
            if (attributedMessage) {
                attributedString = [[NSMutableAttributedString alloc] initWithAttributedString:attributedMessage];
            }else{
                attributedString = [[NSMutableAttributedString alloc] initWithString:self.title];
            }
            [attributedString addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(0, attributedString.length)];
            [self setValue:attributedString forKey:@"attributedTitle"];
        }
        return self;
    };
    }
    - (UIAlertController *(^)(NSAttributedString*))cd_titleAttributed{
    return ^(NSAttributedString* string){
        [self setValue:string forKey:@"attributedTitle"];
        return self;
    };
    }
    #pragma mark ----- Msg 样式
    - (UIAlertController *(^)(NSString*))cd_message{
    return ^(NSString* message){
        self.message = message;
        return self;
    };
    }
    - (UIAlertController *(^)(UIFont*))cd_messageFont{
    return ^(UIFont* font){
        if (self.message.length>0) {
            NSAttributedString * attributedMessage = [self valueForKey:@"attributedMessage"];
            NSMutableAttributedString *attributedString;
            if (attributedMessage) {
                attributedString = [[NSMutableAttributedString alloc] initWithAttributedString:attributedMessage];
            }else{
                attributedString = [[NSMutableAttributedString alloc] initWithString:self.message];
            }
            [attributedString addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, attributedString.length)];
            [self setValue:attributedString forKey:@"attributedMessage"];
        }
        return self;
    };
    }
    
    - (UIAlertController *(^)(UIColor*))cd_messageColor{
    return ^(UIColor* color){
        if (self.message.length>0) {
            NSAttributedString * attributedMessage = [self valueForKey:@"attributedMessage"];
            NSMutableAttributedString *attributedString;
            if (attributedMessage) {
                attributedString = [[NSMutableAttributedString alloc] initWithAttributedString:attributedMessage];
            }else{
                attributedString = [[NSMutableAttributedString alloc] initWithString:self.message];
            }
            
            [attributedString addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(0, attributedString.length)];
            [self setValue:attributedString forKey:@"attributedMessage"];
        }
        return self;
    };
    }
    - (UIAlertController *(^)(NSString*))cd_messageAttributed{
    return ^(NSString* string){
        [self setValue:string forKey:@"attributedMessage"];
        return self;
    };
    }
    #pragma mark ----- 按钮
    - (UIAlertController *(^)(NSString*))cd_action{
    return ^(NSString* text){
        UIAlertAction * action = [UIAlertAction actionWithTitle:text style:0 handler:nil];
        [self addAction:action];
        return self;
    };
    }
    - (UIAlertController *(^)(void (^)(UIAlertAction *action)))cd_actionHandler{
    return ^(void (^handler)(UIAlertAction *action)){
        UIAlertAction * action = [UIAlertAction actionWithTitle:@"" style:0 handler:handler];
        [self addAction:action];
        return self;
    };
    }
    - (UIAlertController *(^)(void(^custom)(UIAlertAction * action)))cd_actionCustom{
    return ^(void(^custom)(UIAlertAction * action)){
        UIAlertAction * action = [UIAlertAction actionWithTitle:@"" style:0 handler:nil];
        if (custom) {
            custom(action);
        }
        [self addAction:action];
        return self;
    };
    }
    @end
    
    
    @implementation UIAlertAction (CD)
    
    - (UIAlertAction *(^)(NSString*))cd_text{
    return ^(NSString* text){
        if (text) {
            [self setValue:text forKey:@"title"];
        }
        return self;
    };
    }
    - (UIAlertAction *(^)(UIColor*))cd_textColor{
    return ^(UIColor* color){
        if (color) {
            [self setValue:color forKey:@"titleTextColor"];
        }
        return self;
    };
    }
    
    - (UIAlertAction *(^)(UIAlertActionStyle))cd_style{
    return ^(UIAlertActionStyle style){
        [self setValue:@(style) forKey:@"style"];
        return self;
    };
    }
    - (UIAlertAction *(^)(void(^handler)(UIAlertAction * _Nonnull action)))cd_handler{
    return ^(void(^handler)(UIAlertAction * _Nonnull action)){
        [self setValue:handler forKey:@"handler"];
        return self;
    };
    }
    @end
    

    相关文章

      网友评论

        本文标题:开发中实用的AlertViewController 扩展

        本文链接:https://www.haomeiwen.com/subject/douymctx.html