开发中实用的AlertViewController 扩展

原文链接: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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容