用runtime自定義UIAlertView的字體大小和顏色

在公司app版本發(fā)布前兩小時(shí),產(chǎn)品突然說覺得UIAlertView上的字體太小想再改粗點(diǎn),WTF!最討厭這種臨時(shí)變卦的產(chǎn)品,好吧那就做一做。首先想到系統(tǒng)自帶的UIAlertView好像不能改變字體的大小和顏色(雖然蘋果公司現(xiàn)在推薦用UIAlertViewController,但是要iOS8以上,所以還是用的UIAlertView)所以想著自定義寫一個(gè)AlertView但是想想好麻煩啊本來都打算發(fā)布可以歇一歇了,想到要不試試用runtime動(dòng)態(tài)把屬性替換掉,so let's start.
先寫個(gè)demo,


先把這個(gè)設(shè)置設(shè)成no,本來是想著替換方法,不過后來其實(shí)沒用過objc_msgsend方法。。。然后導(dǎo)入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);
}

果然從打印的屬性中找到了想要的東西


按這兩個(gè)名字看肯定有用!第一個(gè)就是UIAlertViewController的message屬性,第二個(gè)看樣子就是用來改變這個(gè)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內(nèi)容替換掉
object_setIvar(_alert, message, str);

運(yùn)行一下,bingo~


demo地址在這兒,runtime的方法網(wǎng)上有很多就不解釋了:)其實(shí)最后我沒有改,我跟產(chǎn)品說來不及做不來,為了捍衛(wèi)開發(fā)的尊嚴(yán):)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議。它實(shí)...
    香橙柚子閱讀 24,705評(píng)論 8 183
  • 一、URL模塊 -參數(shù)request:http.IncomingMessage的一個(gè)實(shí)例,通過它可以獲取到這次請(qǐng)求...
    迷人的洋蔥蔥閱讀 216評(píng)論 0 0
  • 啪…… 我走了,把你我的回憶埋在永遠(yuǎn)不會(huì)在踏入的土地。 回到家 腦海中總是浮現(xiàn)你我在一起的美好……,你是我心中無...
    預(yù)fesh閱讀 308評(píng)論 0 0
  • 接下來讓我們看第二封信,這封信篇幅較短,或許是Rilke在當(dāng)時(shí)得到了類流感疾病,除了晚回覆外,內(nèi)容也和第一封信不同...
    Chinlogue閱讀 673評(píng)論 0 0
  • 今天去了公公的小老板婚禮。 小老板才23歲。 公司做的不錯(cuò)。 為了辦婚禮,打了個(gè)大棚,按照當(dāng)?shù)氐牧?xí)俗辦酒。 兩天的...
    阿西_8ac3閱讀 202評(píng)論 0 0

友情鏈接更多精彩內(nèi)容