用runtime自定义UIAlertView的字体大小和颜色

在公司app版本发布前两小时,产品突然说觉得UIAlertView上的字体太小想再改粗点,WTF!最讨厌这种临时变卦的产品,好吧那就做一做。首先想到系统自带的UIAlertView好像不能改变字体的大小和颜色(虽然苹果公司现在推荐用UIAlertViewController,但是要iOS8以上,所以还是用的UIAlertView)所以想着自定义写一个AlertView但是想想好麻烦啊本来都打算发布可以歇一歇了,想到要不试试用runtime动态把属性替换掉,so let's start.
先写个demo,


先把这个设置设成no,本来是想着替换方法,不过后来其实没用过objc_msgsend方法。。。然后导入runtime头文件

#import <objc/runtime.h>

demo里为了随大潮用了UIAlertViewController😂
首先遍历一遍UIAlertViewController的属性

unsigned int count = 0;
Ivar *property = class_copyIvarList([UIAlertController class], &count);
for (int i = 0; i < count; i++) {
    Ivar var = property[i];
    const char *name = ivar_getName(var);
    const char *type = ivar_getTypeEncoding(var);
    NSLog(@"%s =============== %s",name,type);
}

果然从打印的属性中找到了想要的东西


按这两个名字看肯定有用!第一个就是UIAlertViewController的message属性,第二个看样子就是用来改变这个message的好东西了,所以尝试修改了一下

 Ivar message = property[2];    
/**
  *  字体修改
  */
UIFont *big = [UIFont systemFontOfSize:25];
UIFont *small = [UIFont systemFontOfSize:18];
UIColor *red = [UIColor redColor];
UIColor *blue = [UIColor blueColor];
NSMutableAttributedString *str = [[NSMutableAttributedString alloc]initWithString:@"hello world" attributes:@{NSFontAttributeName:big,
NSForegroundColorAttributeName:red}];
[str setAttributes:@{NSFontAttributeName:small} range:NSMakeRange(0, 2)];
[str setAttributes:@{NSForegroundColorAttributeName:blue} range:NSMakeRange(0, 4)];

//最后把message内容替换掉
object_setIvar(_alert, message, str);

运行一下,bingo~


demo地址在这儿,runtime的方法网上有很多就不解释了:)其实最后我没有改,我跟产品说来不及做不来,为了捍卫开发的尊严:)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一种新的协议。它实...
    香橙柚子阅读 24,262评论 8 184
  • 一、URL模块 -参数request:http.IncomingMessage的一个实例,通过它可以获取到这次请求...
    迷人的洋葱葱阅读 1,352评论 0 0
  • 啪…… 我走了,把你我的回忆埋在永远不会在踏入的土地。 回到家 脑海中总是浮现你我在一起的美好……,你是我心中无...
    预fesh阅读 1,911评论 0 0
  • 接下来让我们看第二封信,这封信篇幅较短,或许是Rilke在当时得到了类流感疾病,除了晚回覆外,内容也和第一封信不同...
    Chinlogue阅读 3,800评论 0 0
  • 今天去了公公的小老板婚礼。 小老板才23岁。 公司做的不错。 为了办婚礼,打了个大棚,按照当地的习俗办酒。 两天的...
    阿西_8ac3阅读 1,189评论 0 0