iOS實(shí)現(xiàn)修改UIAlertController UIAlertView 內(nèi)容左對(duì)齊,隨意修改Title,Message的字體色冀、顏色潭袱、對(duì)齊樣式等

  • 題記

Alert,項(xiàng)目常用的東西锋恬,為了使用起來(lái)代碼更簡(jiǎn)單屯换,封裝!
本文涉及最直接的問(wèn)題:
1.UIAlertController和UIAlertView的默認(rèn)屬性修改与学,如Title彤悔,Message的textColor、font等
2.實(shí)現(xiàn)封裝UIAlertView和UIAlertController索守,二合一適配系統(tǒng)版本

  • 我不想看下去了晕窑,直接給我代碼吧!點(diǎn)這里
  • UIAlertController&UIAlertView的屬性修改
    • 思路
      比較簡(jiǎn)單卵佛,既然沒(méi)有公有屬性杨赤,那我們看私有,內(nèi)部總得對(duì)他設(shè)置级遭,所以我們直接查看私有屬性和方法望拖,這個(gè)方法同樣適用于修改一些系統(tǒng)不允許修改的控件屬性(舉一反三)。所以想到的是KVC設(shè)置私有屬性挫鸽,但是我們需要先得到Key说敏,Key我們直接利用runtime便利對(duì)象所有實(shí)例變量,加以猜測(cè)試探丢郊。
    • 代碼--->打印私有屬性方法
// 獲得所有ivar
-(NSArray *)getAllIvar:(id)object {
    NSMutableArray *array = [NSMutableArray array];
   unsigned int count;
    Ivar *ivars = class_copyIvarList([object class], &count);
    for (int i = 0; i < count; i++) {
        Ivar ivar = ivars[i];
        const char *keyChar = ivar_getName(ivar);
        NSString *keyStr = [NSString stringWithCString:keyChar encoding:NSUTF8StringEncoding];
        id valueStr = [object valueForKey:keyStr];
        NSDictionary *dic = nil;
        if (valueStr) {
            dic = @{keyStr : valueStr};
        } else {
            dic = @{keyStr : @"值為nil"};
        }
        [array addObject:dic];
    }
    return [array copy];
    }
    return [array copy];
}
  • 分析
    下面是我自己打印并抓取UIAlertController和UIAlertView的幾個(gè)重要的屬性盔沫,咱們看一下
// UIAlertController
  "_cancelAction",
    preferredStyle,
    attributedTitle,
    attributedMessage,
// UIAlertView
 "_alertController" = "<UIAlertController: 0x7fc712c07410>";

1.看到attributed這個(gè)單詞,相信大家大概都懂了枫匾,想到NSAttributedString那么就很開(kāi)放了架诞,字體大小,顏色干茉,其他樣式隨便設(shè)置谴忧,問(wèn)題迎刃而解。
2.發(fā)現(xiàn)UIAlertView里面帶的是_alertController,原來(lái)蘋(píng)果早就在內(nèi)部改變了AlertView角虫,里面并沒(méi)有contentView沾谓,全丟到這個(gè)私有屬性里了,所以要修改AlertView樣式還是在修改內(nèi)部的AlertController戳鹅,私有屬性同上
3._cancelAction均驶,還可以往里深入,繼續(xù)打印探究枫虏,改變其顏色字體等

  • 代碼實(shí)現(xiàn)--->UIAlertController具體改變Message,Title的一切
// 當(dāng)然你也可以往attributedStringadd加一些顏色和其他樣式
NSMutableAttributedString *alertControllerMessageStr = [[NSMutableAttributedString alloc] initWithString:message];
NSMutableParagraphStyle *ps = [[NSMutableParagraphStyle alloc] init];
[ps setAlignment:NSTextAlignmentLeft];
[alertControllerMessageStr addAttribute:NSParagraphStyleAttributeName value:ps range:NSMakeRange(0, message.length)];
[alertControllerMessageStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:16] range:NSMakeRange(0, message.length)];
 [alertVc setValue:alertControllerMessageStr forKey:@"attributedMessage"];
  • 代碼實(shí)現(xiàn)--->UIAlertView具體改變Message,Title的一切
UIAlertController *alertVc = [alertView valueForKey:@"alertController"];
 NSMutableAttributedString *alertControllerMessageStr = [[NSMutableAttributedString alloc] initWithString:message];
 [alertControllerMessageStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:16] range:NSMakeRange(0, message.length)];
 [alertVc setValue:alertControllerMessageStr forKey:@"attributedMessage"];
  • 實(shí)現(xiàn)對(duì)UIAlertController和UIAlertView的封裝
    • 思路
      根據(jù)version的8.0上下妇穴,適配2種Alert爬虱,實(shí)習(xí)回調(diào)block處理點(diǎn)擊,或者不回調(diào)來(lái)展示腾它,具體看代碼跑筝。
  • 使用
    打開(kāi)完整代碼引入UIViewController+TggAlertExtension,如下圖
    UIViewController+TggAlertExtension的位置
  • 代碼--->下面是經(jīng)過(guò)封裝適配的直接可以使用的API
// 彈出AlertView帶左對(duì)齊Message携狭,
-(void)tgg_presentAlertViewWithMainTitle:(NSString *)mainTitle
                                  LeftTextmessage:(NSString *)message
                              firstAction:(NSString *)firstAction
                             secondAction:(NSString *)secondAction
                             successBlock:(SuccessBlock)successBlock;
// 彈出AlertView就一個(gè)action继蜡,無(wú)message無(wú)block
-(void)tgg_presentAlertViewWithMainTitle:(NSString *)mainTitle
                              actionTitle:(NSString *)actionTitle;
// 彈出AlertView就一個(gè)action,無(wú)message
-(void)tgg_presentAlertViewWithMainTitle:(NSString *)mainTitle
                              actionTitle:(NSString *)actionTitle
                             successBlock:(SuccessBlock)successBlock;
// 彈出AlertView就一個(gè)action逛腿,無(wú)title無(wú)block
-(void)tgg_presentAlertViewWithMessage:(NSString *)message
                            actionTitle:(NSString *)actionTitle;
// 彈出AlertView就一個(gè)action,無(wú)title
-(void)tgg_presentAlertViewWithMessage:(NSString *)message
                            actionTitle:(NSString *)actionTitle
                           successBlock:(SuccessBlock)successBlock;
// 彈出AlertView就一個(gè)action沒(méi)有block
-(void)tgg_presentAlertViewWithMainTitle:(NSString *)mainTitle
                                  message:(NSString *)message
                              actionTitle:(NSString *)actionTitle;
// 彈出AlertView就一個(gè)action的基礎(chǔ)方法仅颇,帶block回調(diào)
-(void)tgg_presentAlertViewWithMainTitle:(NSString *)mainTitle
                                  message:(NSString *)message
                              actionTitle:(NSString *)actionTitle
                             successBlock:(SuccessBlock)successBlock;
// 彈出AlertView的基本方法,最多2個(gè)action
-(void)tgg_presentAlertViewWithMainTitle:(NSString *)mainTitle
                                  message:(NSString *)message
                              firstAction:(NSString *)firstAction
                             secondAction:(NSString *)secondAction
                             successBlock:(SuccessBlock)successBlock;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末单默,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子忘瓦,更是在濱河造成了極大的恐慌搁廓,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耕皮,死亡現(xiàn)場(chǎng)離奇詭異境蜕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)凌停,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)粱年,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人罚拟,你說(shuō)我怎么就攤上這事台诗。” “怎么了赐俗?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵拉队,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我阻逮,道長(zhǎng)粱快,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任叔扼,我火速辦了婚禮事哭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘币励。我一直安慰自己慷蠕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布食呻。 她就那樣靜靜地躺著流炕,像睡著了一般澎现。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上每辟,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天剑辫,我揣著相機(jī)與錄音,去河邊找鬼渠欺。 笑死妹蔽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挠将。 我是一名探鬼主播胳岂,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼舔稀!你這毒婦竟也來(lái)了乳丰?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤内贮,失蹤者是張志新(化名)和其女友劉穎产园,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體夜郁,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡什燕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了竞端。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屎即。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖婶熬,靈堂內(nèi)的尸體忽然破棺而出剑勾,到底是詐尸還是另有隱情,我是刑警寧澤赵颅,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布虽另,位于F島的核電站,受9級(jí)特大地震影響饺谬,放射性物質(zhì)發(fā)生泄漏捂刺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一募寨、第九天 我趴在偏房一處隱蔽的房頂上張望族展。 院中可真熱鬧,春花似錦拔鹰、人聲如沸仪缸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)恰画。三九已至宾茂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拴还,已是汗流浹背跨晴。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留片林,地道東北人端盆。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像费封,于是被迫代替她去往敵國(guó)和親焕妙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • iOS 8的新特性之一就是讓接口更有適應(yīng)性弓摘、更靈活访敌,因此許多視圖控制器的實(shí)現(xiàn)方式發(fā)生了巨大的變化。全新的UIPre...
    烏拉拉zzZ閱讀 919評(píng)論 0 2
  • 自從iOS9出來(lái)之后衣盾,需要使用UIAlertController來(lái)彈出彈框,不在提倡使用UIAlertView了爷抓,...
    南京楊小兵閱讀 554評(píng)論 1 0
  • iOS 8的新特性之一就是讓接口更有適應(yīng)性势决、更靈活,因此許多視圖控制器的實(shí)現(xiàn)方式發(fā)生了巨大的變化蓝撇。全新的UIPre...
    Tank丶Farmer閱讀 2,112評(píng)論 2 4
  • 苦逼的開(kāi)發(fā)者,最終敗給了一個(gè)任性的UI,系統(tǒng)原生UIAlertController的按紐顏色必須改.于是,開(kāi)始了不...
    愛(ài)哼的阿貍閱讀 581評(píng)論 0 0
  • 對(duì)的人 是一抹色彩 第一眼就亮了 對(duì)的人 是一種味道 聞香識(shí)女人 對(duì)的人 是一種聲音 弦斷有人聽(tīng) 對(duì)的人 是一種味...
    拱宸橋東閱讀 127評(píng)論 0 1