美文网首页iOS开发技术iOSiOS开发(OC)
[iOS]改变UIAlertController的标题、内容的字

[iOS]改变UIAlertController的标题、内容的字

作者: PlutoMa | 来源:发表于2016-03-23 22:36 被阅读27525次

在开发中,弹出框是必不可少的,通常情况下,我们只要弹出系统自带的弹出框就可以。but,在某些情况下,万恶的UI会要求你修改显示文字的大小、颜色,虽然系统自带有一种红色字体的UIAlertAction,但是这种Action并不能放在Cancel位置,所以,更多时候,需要我们自己修改文字字体和颜色。
我采用的方法是KVC:
正常情况下,我们配置出来的UIAlertController是这样的:

123.png

或者是这样:

345.png

代码如下:

    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"提示内容" preferredStyle:UIAlertControllerStyleAlert];
//    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"提示内容" preferredStyle:UIAlertControllerStyleActionSheet];
    
    UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"Default" style:UIAlertActionStyleDefault handler:nil];
    UIAlertAction *destructiveAction = [UIAlertAction actionWithTitle:@"Destructive" style:UIAlertActionStyleDestructive handler:nil];
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil];
    
    [alertController addAction:defaultAction];
    [alertController addAction:destructiveAction];
    [alertController addAction:cancelAction];
    
    [self presentViewController:alertController animated:YES completion:nil];

代码里展示了系统提供的三种UIAlertAction,现在我们要对文字的字体和颜色进行设置:

  • 1.标题和提示内容的文字设置
    代码如下:
//修改title
    NSMutableAttributedString *alertControllerStr = [[NSMutableAttributedString alloc] initWithString:@"提示"];
    [alertControllerStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, 2)];
    [alertControllerStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:17] range:NSMakeRange(0, 2)];
    [alertController setValue:alertControllerStr forKey:@"attributedTitle"];

    //修改message
    NSMutableAttributedString *alertControllerMessageStr = [[NSMutableAttributedString alloc] initWithString:@"提示内容"];
    [alertControllerMessageStr addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(0, 4)];
    [alertControllerMessageStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20] range:NSMakeRange(0, 4)];
    [alertController setValue:alertControllerMessageStr forKey:@"attributedMessage"];

效果如下:

123.png
  • 2.设置按钮文字,就拿取消按钮距离:
    代码如下:
    //修改按钮
    if (cancelAction valueForKey:@"titleTextColor") {
        [cancelAction setValue:[UIColor redColor] forKey:@"titleTextColor"];
    }

效果如下:

123.png

至于里面的key值怎么得到的,过两天会写一篇文章来讲述。

相关文章

网友评论

  • 给自己定个小目标:怎么修改Destructive。这个颜色
  • 上官馨玥:能不能 修改UIAlertController 的圆角度数呢?我现在字体颜色都修改了,只是圆角弧度需要小点
  • 0c476cf24b0e:我想问问楼主,这样做或者利用runtime,在苹果审核的时候有被拒风险吗
  • iYeso:这个KVC和runtime用的好
  • ylgwhyh:这个在iPhone5上面会崩溃
    setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key _titleTextColor.'
    只是发给大家伙看看哈
  • b4067f4d3883:请问kvc直接使用那些key 值上架会不会被拒,使用私有API这类原因
  • Mt丶Jean:iOS8下会Crash
  • Roader:感觉如果你用class_copy_Ivar查找到了这个成员变量,那么KVC设值之前并不需要加判断吧?
  • xiaoliuTX_iOS:调试的时候打印alertAction对象,控制台左侧的窗口下面就可以看到他的所有属性了。何必那么麻烦获取varlist
  • luzsyn:求教:UIAlertAction的title内容很长很长的话,字体会自动缩小,怎么处理啊?
  • 0无敌小宋0:用这个,不适合7的系统吧
  • 蒋昉霖:能否留下QQ,设置无效呢
  • 神秘嘉宾yzj:666666,kvc强行更改
  • Reus丶你是我的梦想啊:if (alertController valueForKey:@"attributedTitle") {
    [alertController setValue:alertControllerStr forKey:@"attributedTitle"];
    } 这里应该是 if(![alertController valueForKey:@"attributedTitle"]) {} ;
  • 沐暮风:if (alertController valueForKey:@"attributedMessage") 这个判断应该是不正确的。因为判断attributedMessage的value有可能未空,然后判断进不去,应该是判断alertController是否有这个属性。然后再kvo设置值。不知道这样说对不
  • 5ad4db95da2d:你好,能把 取消/确认按钮字体样式变为自定义的吗?不要系统的 最近公司需求,将确认、取消按钮按钮字体换为自己的,谢谢
  • 4b1b4899b759:如果加判断的话就会不执行里面的代码,去掉判断就可以改变颜色了。key值是“titleTextColor”或者“_titleTextColor”都可以改变颜色。
    wincalling:正解
  • 可恶:if (cancelAction valueForKey:@"titleTextColor") {
    [cancelAction setValue:[UIColor redColor] forKey:@"titleTextColor"];
    }这个if判断不执行怎么办?直接写setValue forKey又怕崩溃
    比利王:@968618715750 if去掉直接写在@try里
    咔客:请问下你解决这个问题了吗?
  • 听先生的秘密基地:准确的说我runtime完没用titleTextColor这个key啊。
    title,
    style,
    enabled,
    handler,
    simpleHandler,
    image,
    shouldDismissHandler,
    "_descriptiveText",
    contentViewController,
    keyCommandInput,
    keyCommandModifierFlags,
    "_representer",
    "_isPreferred",
    "_alertController"
    暮雨飞烟:但是确实能修改
  • 和影子玩拳击:楼主,我想问一下,按钮的字体大小key是什么
    墨狂之逸才:http://dongxin.online/2016/05/15/%E4%BF%AE%E6%94%B9UIAlertAction%E7%9A%84%E5%AD%97%E4%BD%93%E9%A2%9C%E8%89%B2%E5%92%8C%E5%A4%A7%E5%B0%8F/这里说:修改字体大小则需要创建一个UILabel的类目。有其他方法吗?
    和影子玩拳击:@Kuroky09 没
    b7cccc10e2eb:@和影子玩拳击 同问,你解决了吗
  • 张梓辰:楼主,你好帅
  • 21593bb673fb:我的颜色怎么设置不上?
  • 21593bb673fb:你好,方便加一个QQ吗?
  • 秋天的田野:@天空中的球,这样写[cancelAction setValue:[UIColor blackColor] forKey:@"titleTextColor"];也可以
    天空中的球:@秋天的田野 建议使用“_titleTextColor”, 因为当我们查看 UIAlertAction的属性列表中并没有它,“_titleTextColor”是的它的成员变量列表中的一员。
  • 天空中的球:在UIAlertAction中 ,这样才是对的
    [cancelAction setValue:[UIColor blackColor] forKey:@"_titleTextColor"];
    简单程序媛:@Warrior_Seven 同问。_titleTextColor 这个私有属性是 iOS 8.3才出来的,所以在 iOS 8.3 之前使用这个方法都会造成崩溃,求问大神有没有其他方法设置cancelAction的颜色?
    Warrior_Seven:在iOS 8.2中 这句话直接崩溃了,说找不到键值对,不知怎么回事,求大神解答一下,谢谢了
    PlutoMa:@天空中的球 这不就是在UIAlertAction中么
  • 42e1c79aee08:这个键值,具体怎么得到的呀?求教
    2de0e25dd892:@不要安逸的过 通过运行时获取KEY
    PlutoMa:@不要安逸的过 https://git.coding.net/MDMPluto/GetClassInfo.git
  • 3a93b6ca03e3:关键值我用attributedMessage不行,要用message才行,不过在if里面要用attributedMessage,这是什么原因?
    b4deb7b8ea6c:@烏先森 判断该key是否有属性值,默认该属性是没值的。所以要想正确设置,不应有这句判断
    PlutoMa:@烏先森 什么意思,没懂
  • bfc0d4ef4d91:您好,我是新手,我在一个群里说起下面这句代码的时候,就是“[alertController setValue:alertControllerStr forKey:@"attributedTitle"];”这句。有人说可能涉及到私有API,请教会有这个问题吗?
    还有就是我不太知道怎么通过“class_copyIvarList”去找到key值?
    谢谢啊~~
    Louis_hey:@AaronLee77 打断点调试也可以看到的
    bfc0d4ef4d91:@PlutoMa 哦~~谢谢啊~~
    PlutoMa:这个和私有api没关系啊。第二个问题你可以去看一下runtime
  • OnepPieceD:求key值是怎么的得到的 :+1:
    OnepPieceD:哦哦,谢谢啦
    PlutoMa:class_copyIvarList

本文标题:[iOS]改变UIAlertController的标题、内容的字

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