美文网首页iOS进阶+实战UI细节属性iOS成长路线
iOS开发 自定义UIAlertController的样式

iOS开发 自定义UIAlertController的样式

作者: Li_Cheng | 来源:发表于2016-07-05 14:13 被阅读3978次

个人博客: LiCheng的博客

引言:

关于提示框, 系统自带的提示框有时可能满足不了我们的需求, 比如一个提示框的取消按钮我需要灰色字体显示, 这时候就需要自定义提示框的样式了。

示例图 苹果自iOS8开始,就已经废弃了之前用于界面提醒的UIAlertView类以及UIActionSheet,取而代之的是UIAlertController以及UIAlertAction,从实际使用情况来看,苹果把之前不同类型/样式的通知实现方法进行了统一,简化了有关提醒功能的实现。

UIAlertController的基本使用

一个简单的提示框:

    UIAlertController *alert    = [UIAlertController alertControllerWithTitle:@"标题" message:@"正文" preferredStyle:(UIAlertControllerStyleAlert)];

    UIAlertAction *okAction     = [UIAlertAction actionWithTitle:@"确定" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) {
        // 点击确定按钮时 要进行的操作可以写到这里
    }];
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:(UIAlertActionStyleCancel) handler:^(UIAlertAction * _Nonnull action) {
        // 点击取消按钮时 要进行的操作可以写到这里
    }];
    
    [alert addAction:cancelAction];
    [alert addAction:okAction];

    [self presentViewController:alert animated:YES completion:nil];

自定义UIAlertController

主要是使用kvc的方式来自定义UIAlertController的样式:

    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"标题" message:@"内容" preferredStyle:UIAlertControllerStyleAlert];
    
    // 使用富文本来改变alert的title字体大小和颜色
    NSMutableAttributedString *titleText = [[NSMutableAttributedString alloc] initWithString:@"这里是标题"];
    [titleText addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:24] range:NSMakeRange(0, 2)];
    [titleText addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, 2)];
    [alert setValue:titleText forKey:@"attributedTitle"];
    
    // 使用富文本来改变alert的message字体大小和颜色
    // NSMakeRange(0, 2) 代表:从0位置开始 两个字符
    NSMutableAttributedString *messageText = [[NSMutableAttributedString alloc] initWithString:@"这里是正文信息"];
    [messageText addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:10] range:NSMakeRange(0, 6)];
    [messageText addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, 2)];
    [messageText addAttribute:NSForegroundColorAttributeName value:[UIColor brownColor] range:NSMakeRange(3, 3)];
    [alert setValue:messageText forKey:@"attributedMessage"];


    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
    
    // 设置按钮背景图片
    UIImage *accessoryImage = [[UIImage imageNamed:@"selectRDImag.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    [cancelAction setValue:accessoryImage forKey:@"image"];
    
    // 设置按钮的title颜色
    [cancelAction setValue:[UIColor lightGrayColor] forKey:@"titleTextColor"];
    
    // 设置按钮的title的对齐方式
    [cancelAction setValue:[NSNumber numberWithInteger:NSTextAlignmentLeft] forKey:@"titleTextAlignment"];
    
    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"确认" style:UIAlertActionStyleDefault handler:nil];

    [alert addAction:okAction];
    [alert addAction:cancelAction];

    [self presentViewController:alert animated:YES completion:nil];

效果图:

效果图

demo下载地址:CustomAlertControllerDemo
<br />

<br />

相关文章

网友评论

  • 洛河水手:@Li_Cheng 怎么把alertAction上的图片弄到右边?
  • 咔客:怎样让添加的文本之间产生间隙啊???只能用系统的吗?
    御雪飞斐:@968618715750 用富文本
  • 你皮任你皮:可以改变uialertaction的背景颜色吗
    Li_Cheng:@sendoh丶 不可以
  • code_间特门:这个自定义的程度还不够,我想让整个背景图片改变可不可以
    code_间特门:@doubleJJ 不知道,因该不能吧,好想可以做一个类似的。思路是1、写一个view。 2、view上写一个titleLabel、messageLabel、 leftButton、rightButton。3然后写这个view的显示的方法和view消失的方法,还有leftButton和rightButton的点击方法。这应该是真正的自定义吧
    doubleJJ:@code_间特门 同问,UIAlertController可以添加自定义的View吗?
  • 圍繞的城:用富文本就能做到
  • LimMem:太棒了

本文标题:iOS开发 自定义UIAlertController的样式

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