自定義UIAlertController樣式之YXAlertController

前言:

前段時(shí)間梧油,項(xiàng)目中要使用一個(gè)按鈕背景為黃色的彈框樣式,然后title字體和message字體的大小和顏色也需要調(diào)整催式。由于系統(tǒng)UIAlertController的樣式修改局限:調(diào)整title和message字體的大小和顏色倒是可以根據(jù)私有屬性進(jìn)行修改(不推薦箕速,因?yàn)檫@些屬性是不同的iOS版本添加的园欣,所以雖然能修改叼风,但是也比較費(fèi)勁取董,不安全。)然而比如彈框分割線的顏色无宿,確定茵汰,取消按鈕的字體顏色,背景色等等卻是修改不了孽鸡。蹂午。。所以彬碱,考慮自定義豆胸,類比系統(tǒng)樣式的大小布局,API格式堡妒,寫(xiě)了一個(gè)YXAlertController配乱。廢話不多說(shuō)先看下示例對(duì)比:


systemAlert.png
YXAlert.png
systemActionSheet.png
YXActionSheet.png

接下來(lái)說(shuō)說(shuō)YXAlertController組成部分及實(shí)現(xiàn):

注:由于考慮到可移植性和不依賴第三方自動(dòng)布局庫(kù),YXAlertController里面所有的布局采用設(shè)置frame實(shí)現(xiàn)皮迟,并創(chuàng)建了一個(gè)UIView的分類搬泥,便于取坐標(biāo),寬高等伏尼。

一忿檩、組成部分

YXAlertController由YXAlertController,YXAlertAction,YXAlertView,YXActionSheetView,YXTableViewCell,YXAlertLayout六個(gè)文件組成。YXAlertView和YXActionViewSheet可以合并為一個(gè)文件實(shí)現(xiàn)爆阶,這里分開(kāi)了燥透,YXAertLayout是設(shè)置顏色,字體的一個(gè)model.

二辨图、API格式參照系統(tǒng)API簡(jiǎn)單寫(xiě)了一下班套,下面是 YXAlertController.h文件代碼:
typedef NS_ENUM(NSInteger, YXAlertControllerStyle) {
  YXAlertControllerStyleAlert = 0,
  YXAlertControllerStyleActionSheet
};


@interface YXAlertController : UIViewController

//alertController的color&fontSet
@property (nonatomic, strong, nonnull) YXAlertLayout *layout;

@property (nonatomic, assign) YXAlertControllerStyle style;

+ (instancetype _Nullable )alertControllerWithTitle:(nullable NSString *)title message:(nullable NSString *)message style:(YXAlertControllerStyle)style;

//修改色值和字體之后 使用此方法
- (void)layoutSettings;

- (void)addAction:(YXAlertAction *_Nonnull)action;

- (void)presentFromViewController:(UIViewController *_Nullable)fromViewController animated:(BOOL)flag completion:(void (^_Nullable)(void))completion;

- (void)dismissWithAnimation:(BOOL)flag completion:(void (^_Nullable)(void))completion;
三、實(shí)現(xiàn)原理

很簡(jiǎn)單故河,其實(shí)就是自定制一個(gè)彈框吱韭,根據(jù)用戶設(shè)置的title和message和actions等,進(jìn)行創(chuàng)建alertView并布局鱼的,主要是布局的坐標(biāo)理盆,寬高及l(fā)abel間的間距,字體的大小樣式凑阶,分割線的顏色猿规,遮罩的色值等等參照系統(tǒng)的數(shù)據(jù)進(jìn)行設(shè)置。當(dāng)actions多余兩個(gè)時(shí)宙橱,采用列表布局姨俩,這點(diǎn)跟系統(tǒng)也是一樣的,然后添加到alertController的view上蘸拔,添加遮罩,需要注意的是哼勇,需要自己定義presentViewController和dismiss兩個(gè)方法都伪,對(duì)actionStyle為cancel的按鈕個(gè)數(shù)進(jìn)行控制,多余一個(gè)時(shí)积担,主動(dòng)拋出異常,并且cancelStyle的action需排列到最下面猬仁。

四帝璧、使用方法。
一湿刽、集成方式:

1.可以下載下來(lái)把YXCustomAlert文件夾拖進(jìn)項(xiàng)目中
2.可以用cocoaPods

      pod  'LYXAlertController'
二的烁、使用

1.導(dǎo)入頭文件 #import "YXAlertController.h"
2.創(chuàng)建alertController跟UIAlertController的創(chuàng)建方式一樣,支持alert和actionSheet,下面拿alert舉例:

YXAlertController *alertController = [YXAlertController alertControllerWithTitle:@"愛(ài)爾蘭雪诈闺、土耳其藍(lán)渴庆、莫斯科眼淚。我都收藏在小小的太陽(yáng)里雅镊、還有晴天和微笑襟雷。波斯灣海、維也納廳仁烹、阿拉伯傳說(shuō)耸弄。我都紀(jì)念在厚厚的相集里。還有七粉和公主" message:@"薔薇開(kāi)出的花朵沒(méi)有芬芳卓缰、想念一個(gè)人计呈、懷念一段傷、不流淚征唬、不說(shuō)話" style:YXAlertControllerStyleAlert];
YXAlertAction *cancel = [YXAlertAction actionWithTitle:@"考慮一下" style:1 handler:^(YXAlertAction * _Nonnull action) {
NSLog(@"custom:點(diǎn)擊了取消");
}];

YXAlertAction *done = [YXAlertAction actionWithTitle:@"贊一個(gè)" style:2 handler:^(YXAlertAction * _Nonnull action) {
NSLog(@"custom:點(diǎn)擊了確定");
}];
3.YXAlertCotroller 有一個(gè)layout屬性捌显,修改可以進(jìn)行UI設(shè)置,已達(dá)到預(yù)期的樣式总寒。
@property (nonatomic, strong, nonnull) YXAlertLayout *layout;

//自定義顏色設(shè)置
alertController.layout.doneActionTitleColor = [UIColor redColor];
alertController.layout.cancelActionBackgroundColor = [UIColor whiteColor];
alertController.layout.doneActionBackgroundColor = [UIColor yellowColor];
alertController.layout.lineColor = [UIColor redColor];
alertController.layout.topViewBackgroundColor = [UIColor orangeColor];
alertController.layout.titleColor = [UIColor whiteColor];
//設(shè)置之后要調(diào)用下此方法扶歪。
[alertController layoutSettings];
4.添加action
[alertController addAction:cancel];
[alertController addAction:done];
5.present 這里使用自定義的方法
[alertController presentFromViewController:self animated:YES completion:nil];

最后說(shuō)下不足之處:

1.彈出和消失動(dòng)畫(huà),這里只是簡(jiǎn)單的實(shí)現(xiàn)了一下偿乖,跟系統(tǒng)的動(dòng)畫(huà)效果相比還是有點(diǎn)差距击罪。以后可以多實(shí)現(xiàn)幾種動(dòng)畫(huà)效果
2.actionSheet的樣式,沒(méi)有把cancel的action與上面隔開(kāi)贪薪,這里只是簡(jiǎn)單的放到了最下面媳禁。
3.alertView的樣式還可以擴(kuò)展,可以展示自定義的View画切,比如輸入框竣稽,選擇日期等等。

demo地址:
https://github.com/liuyunxinok/LYXAlertController

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市毫别,隨后出現(xiàn)的幾起案子娃弓,更是在濱河造成了極大的恐慌,老刑警劉巖岛宦,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件台丛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡砾肺,警方通過(guò)查閱死者的電腦和手機(jī)挽霉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)变汪,“玉大人侠坎,你說(shuō)我怎么就攤上這事∪苟埽” “怎么了实胸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)番官。 經(jīng)常有香客問(wèn)我庐完,道長(zhǎng),這世上最難降的妖魔是什么鲤拿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任假褪,我火速辦了婚禮,結(jié)果婚禮上近顷,老公的妹妹穿的比我還像新娘生音。我一直安慰自己,他們只是感情好窒升,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布缀遍。 她就那樣靜靜地躺著,像睡著了一般饱须。 火紅的嫁衣襯著肌膚如雪域醇。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天蓉媳,我揣著相機(jī)與錄音譬挚,去河邊找鬼。 笑死酪呻,一個(gè)胖子當(dāng)著我的面吹牛减宣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播玩荠,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼漆腌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼贼邓!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起闷尿,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤塑径,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后填具,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體统舀,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年劳景,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绑咱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡枢泰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出铝噩,到底是詐尸還是另有隱情衡蚂,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布骏庸,位于F島的核電站毛甲,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏具被。R本人自食惡果不足惜玻募,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望一姿。 院中可真熱鬧七咧,春花似錦、人聲如沸叮叹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蛉顽。三九已至蝗砾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間携冤,已是汗流浹背悼粮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留曾棕,地道東北人扣猫。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像睁蕾,于是被迫代替她去往敵國(guó)和親苞笨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子债朵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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

  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程,因...
    小菜c閱讀 6,404評(píng)論 0 17
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,099評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)瀑凝、插件序芦、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,101評(píng)論 4 62
  • 生活為什么會(huì)變成這樣谚中,我現(xiàn)在還搞不清楚原因,我現(xiàn)在能做的寥枝,就是一個(gè)人躲著哭泣宪塔,讓眼淚一滴又一滴地掉落下來(lái)。 我以前...
    習(xí)慣喜歡吸管閱讀 340評(píng)論 2 0
  • 看見(jiàn)這個(gè)標(biāo)題囊拜,很多朋友會(huì)想到王力宏的《你不知道的事》某筐,事實(shí)上,我確實(shí)是突然想到了這句歌冠跷,才有了寫(xiě)這篇文章的靈感南誊。...
    式微Yore閱讀 199評(píng)論 0 0