iOS 尤其雅致轻便的UIAlertView/UIAlertController封装使用

3、静夜,这么些项目几年前并不贵,大致是欣赏的人太多,价格被炒起来,比在此从前贵了,颜色比较讨人喜欢,看起来像一头萌萌的老姑娘。

2.5.转移alertController的书体颜色

能够因此KVC的法门访问alertController的私房属性,从而实行修改对应的书体的颜料,甚至字体。
对于UIAlertAction,能够用上边包车型地铁不二法门修改字体颜色:
[alertAction setValue:[UIColor grayColor] forKey:@"titleTextColor"];

修改UIAlertAction字体颜色的效果

不过如同前边说的,个人并不推荐这类格局,所以源码中并未提供有关的主意。
要是有照应的超过常规规须求,总体来说,依旧自定义alert视图比较灵活,网上有关的开源库也有不少方可向来运用,不必总是纠结于系统的实现方式。

末尾,欢迎使用JXTAlertManager,如若遭遇其他难点,请马上沟通小编。

参考小说:
1.iOS更改UIActionController弹出字体的样式
2.UIAlertController
不难修改title以及按钮的字体颜色

3.How to add subview inside UIAlertView for iOS
7?

4.UIAlertView addSubview in
iOS7

5.iOS
UIAlertView中UIActivityindicatorView风火轮指示加载等待

2、桃之卵,那一个连串人气也正如高,叶片出景况是粉粉的,圆润可爱,不过需注意的是,桃之卵和桃美女模样很一般,桃美丽的女人有尖尖,可是桃之卵没有,而且桃美丽的女孩子不出状态的颜料偏白紫罗兰色。

·转发请宣示小编、出处·

桃之卵

前言:

此前做过一套关于UIAlertView/UIAlertController的混合封装(旧版封装链接:iOS
(封装)一句话调用系统的alertView和alertController


十分是将alertView和alertController做了本子适配封装在一块儿的,提供了变参和数组三种艺术,不过今后总的来说,尽管是“一句话”调用,但并不是很优雅的点子。

这一次,改变了方案,将UIAlertView和UIAlertController分开实行了拍卖,全体代码也轻量了成都百货上千。
新版的代码及德姆o见GitHub:

JXTAlertManager

  • 基于UIAlertView封装的JXTAlertView,那些是将事先写德姆o时搞的一套火速使用alertView的工具抽离整理出来的,并提供了C函数直接调用,像那样:
    jxt_showAlertTitle(@"简易调试使用alert,单按钮,标题默认为“确定”");
    就能够一直体现出一个alertView。
  • 基于UIAlertController封装的JXTAlertController,扶助iOS8及以上。调用格局为UIViewController的扩张分类方法,帮助使用链式语法的法子配置alert的按钮及体制,绝对于变参大概数组,越发简明。

JXTAlertManager大体结构

雪莲,表面有一层金红粉末,图片看恐怕觉得一般只是实物挺尴尬。因为太贵了,假若想买便宜一点的类似品种,可以设想买芙蓉雪莲

1. JXTAlertView 方便调节和测试工具

据此称之为急速调剂工具,正是因为那套代码是事先写德姆o时搞出来的。所以,要是或不是要适配iOS7及以下版本的话,那套代码依然提出只用在平日德姆o测试。也由此,并没有对准UIActionSheet再开始展览包装,说白了是因为懒……
一生写一些德姆o代码时,总会用到alert、toast、HUD那个工具,要是没有一套简便的工具,会麻烦很多,所以便从轻量便捷角度出发,基于UIAlertView,封装完毕了alert、toast、HUD这几个常用工具。

JXTAlertView大概效果演示

桃美人

2.3.链式语法的“隐患”

用过Masonry以此库的,应该都对链式语法不会太素不相识。链式语法能够使得代码简化且逻辑清晰化。然则,其也有一定的“隐患”存在。
Masonry有道是是用的最多的贰个电动布局的三方库,类似的还有SDAutoLayout(那里只是比喻,同样的三方还有成都百货上千,这些应该是除了Masonry外,用的相持多一些的3个)那样的,同样的链式语法,后者就如越来越从简优雅。那干什么大名鼎鼎的Masonry不那样干啊?小编想是因为“安全”。

SDAutoLayout的德姆o做1个试行:

view为nil导致的倒台

这边把view0置为nil,之后运营,程序间接崩溃了。。。那就如于履行三个未赋值的空block。
有人可能会以为这样的尝试没有意思,为nil了干嘛还要布局呢?其实那是小编前阵子在包装二个链式库时蒙受的题材:实际应用开发中,情形要复杂很多,有个别view是动态增加的,甚至是基于接口数据动态创造的,如若在处理这类代码逻辑中不慎,就会导致上述难点,给不设有的view进行布局,直接造成程序崩溃。。。
骨子里那也是代码书写规范的标题,针对那类动态view,在处理时,本就应当加上if规则判断的,可是有时候简单忽略,或然客人接手相关代码时,也简单忽视。固然用Masonry的块配置布局,就不会时有产生那类难点,因为那种意况,对于Masonry那种写法,就是一个空指针执行1个格局,其结果就是不进行,而像SDAutoLayout那类的,不作判空处理,就会造成程序崩溃。那Ritter别要留心。

可是桃美观的女子也很动人,美女类别的大半挺可爱,白美丽的女子、桃美女什么的,价格比较方便,喜欢也能够养

1.3.三种HUD的实现

那边的HUD差距于toast之处在于,其倒闭时机可控,并不是但是的一个延时来得。
二种HUD是指只是的文字型、带风火轮(菊花)的加载窗、带进程条的加载窗。
后两者用KVC的章程访问了alertView的私人住房属性accessoryView落到实处,那样做或者没有太大标题,不过照旧不提出线上付出使用,而且使用那种办法访问私有属性本来就是不太安全的,一旦key(私有属性名)改变了,不做容错处理,会崩溃,源码完毕中做了迟早的容错,但是,一旦对应key变化,也就造成对应效能失效了。

  • 演示代码(C函数格局):

jxt_showLoadingHUDTitleMessage(@"title", @"message");
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    jxt_dismissHUD();
});

HUD还有相应的大概的显得加载成功战败状态的格局,以及基础代谢进程条进程值的法子,详情见德姆o。

6、黑王子,个人觉得黑王子不算越发美观的品种,不过是普货里就能找到的少见的北京蓝品种,只要晒晒很不难出稻草黄了,和其余颜料的多肉拼盆现在很难堪,价格便宜也好养,开的花是革命恍惚中有点冷艳的感觉到。

2. JXTAlertController(iOS8)(链式语法的“隐患”)

JXTAlertController是根据系统的UIAlertController封装的,因而也不得不帮助iOS8及以上系统版本。
即使如此源码中的JXTAlertManagerHeader.h做了二个版本适配,可是,其含义更加多在于提示,很只怕为此出错,所以,假若要适配iOS7,对应方法依然须要活动适配。
上面都是alert举例,actionSheet同理。

JXTAlertController大概效果演示


2.2.链式语法添加按钮

[self jxt_showActionSheetWithTitle:@"title"
                           message:@"message"
                 appearanceProcess:^(JXTAlertController * _Nonnull alertMaker) {
    alertMaker.
    addActionCancelTitle(@"cancel").
    addActionDestructiveTitle(@"按钮1").
    addActionDefaultTitle(@"按钮2").
    addActionDefaultTitle(@"按钮3").
    addActionDestructiveTitle(@"按钮4");
} actionsBlock:^(NSInteger buttonIndex, UIAlertAction * _Nonnull action, JXTAlertController * _Nonnull alertSelf) {

    if ([action.title isEqualToString:@"cancel"]) {
        NSLog(@"cancel");
    }
    else if ([action.title isEqualToString:@"按钮1"]) {
        NSLog(@"按钮1");
    }
    else if ([action.title isEqualToString:@"按钮2"]) {
        NSLog(@"按钮2");
    }
    else if ([action.title isEqualToString:@"按钮3"]) {
        NSLog(@"按钮3");
    }
    else if ([action.title isEqualToString:@"按钮4"]) {
        NSLog(@"按钮4");
    }
}];

appearanceProcess计划块中,alertMaker是当前alertController对象,addActionCancelTitle(@"cancel")是加上1个按钮,其等效于:

[alertController addAction:[UIAlertAction actionWithTitle:@"cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

}]];

那边引入了大约的链式语法,能够连接添加系统帮衬的三类action按钮,当然UIAlertActionStyleCancel这几个样式的action只可以添加一回。那样能够大大简化代码。

actionsBlock是action按钮响应回调,能够依据index区分响应,index根据实施add的语法链从0依序扩张,cancel类型的action布局地点是定位的,和丰富相继非亲非故,但其index与增进相继有关。
对此复杂可能至极的alertController,也足以依照action.title只怕action区分响应。

2、冬美人,和胧月一样,易养,老桩也便宜。

1.2.简单的toast

此间的toast提醒,有别于古板意义上的toast,因为其是基于alertView完毕的,是一个从未有过按钮的alertView。可自定义显示延时岁月,帮衬关闭回调的布置。

[JXTAlertView showToastViewWithTitle:@"title"
                             message:@"message"
                            duration:2
                   dismissCompletion:^(NSInteger buttonIndex) {
    NSLog(@"关闭");
}];

4、吉娃娃,红尖尖相比萌,类似有红尖尖的种类还有花月夜,图片笔者就不放了

1.1.高效使用alertView

万一头是不难的三个升迁,能够如此使用(那里只是三个演示,详细用法见源码):
jxt_showAlertTitle(@"简易调试使用alert,单按钮,标题默认为“确定”");
其促成是根据:

[JXTAlertView showAlertViewWithTitle:title 
                             message:message 
                   cancelButtonTitle:cancelButtonTitle 
                    otherButtonTitle:otherButtonTitle
                   cancelButtonBlock:cancelBlock 
                    otherButtonBlock:otherBlock];

那是常用的三个以内的按钮的alertView,也足以那样使用:

jxt_showAlertTwoButton(@"title", @"message", @"cancel", ^(NSInteger buttonIndex) {
    NSLog(@"cancel");
}, @"other", ^(NSInteger buttonIndex) {
    NSLog(@"other");
});

本着于复杂的多按钮的alertView,仍然使用变参情势,按钮响应,依据添加的按钮题指标index号依序区分:

[JXTAlertView showAlertViewWithTitle:@"title"
                             message:@"message"
                   cancelButtonTitle:@"cancel"
                    buttonIndexBlock:^(NSInteger buttonIndex) {
    if (buttonIndex == 0) {
        NSLog(@"cancel");
    }
    else if (buttonIndex == 1) {
        NSLog(@"按钮1");
    }
    else if (buttonIndex == 2) {
        NSLog(@"按钮2");
    }
    else if (buttonIndex == 3) {
        NSLog(@"按钮3");
    }
    else if (buttonIndex == 4) {
        NSLog(@"按钮4");
    }
    else if (buttonIndex == 5) {
        NSLog(@"按钮5");
    }
} otherButtonTitles:@"按钮1", @"按钮2", @"按钮3", @"按钮4", @"按钮5", nil];

12、蓝石莲,没养过,不过养的人比较多,加之属于普货,应该不难养

2.4.任何布署

本着alert上的输入框,保持系统的丰硕情势,示例如下:

[self jxt_showAlertWithTitle:@"title"
                     message:@"message"
           appearanceProcess:^(JXTAlertController * _Nonnull alertMaker) {
    alertMaker.
    addActionDestructiveTitle(@"获取输入框1").
    addActionDestructiveTitle(@"获取输入框2");

    [alertMaker setAlertDidShown:^{
        [self logMsg:@"alertDidShown"];//不用担心循环引用
    }];
    alertMaker.alertDidDismiss = ^{
        [self logMsg:@"alertDidDismiss"];
    };

    [alertMaker addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.placeholder = @"输入框1-请输入";
    }];
    [alertMaker addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.placeholder = @"输入框2-请输入";
    }];
} actionsBlock:^(NSInteger buttonIndex, UIAlertAction * _Nonnull action, JXTAlertController * _Nonnull alertSelf) {
    if (buttonIndex == 0) {
        UITextField *textField = alertSelf.textFields.firstObject;
        [self logMsg:textField.text];//不用担心循环引用
    }
    else if (buttonIndex == 1) {
        UITextField *textField = alertSelf.textFields.lastObject;
        [self logMsg:textField.text];
    }
}];

对于alert展现和倒闭的回调,同样支撑以block的办法配置。
如果appearanceProcess块不实行其余配置操作,即无按钮的alert,同样暗中同意以toast方式处理。可经过安装toastStyleDuration质量,配置toast体现延迟时间。

入门的几近仿佛此多,其实本身还挺喜欢黑法师和绿法师,特别黑法师老桩还挺便宜的,也好养,不过相对没有那么受公众欣赏就不细写了

2.1.构造表达

/**
 JXTAlertController: show-alert(iOS8)

 @param title             title
 @param message           message
 @param appearanceProcess alert配置过程
 @param actionBlock       alert点击响应回调
 */
- (void)jxt_showAlertWithTitle:(nullable NSString *)title
                       message:(nullable NSString *)message
             appearanceProcess:(JXTAlertAppearanceProcess)appearanceProcess
                  actionsBlock:(nullable JXTAlertActionBlock)actionBlock NS_AVAILABLE_IOS(8_0);

上述措施是针对UIViewController做的分类扩展,详见源码。
也正是在有个别VC中选拔时,可一直用self指南针调用。
JXTAlertAppearanceProcess是陈设块,JXTAlertActionBlock是按钮响应回调块。

自己的疯长的山地玫瑰

10、黄丽,时辰候相比较讨人喜欢,颜色偏芙蓉红,个人认为黄丽刻钟候比老桩更萌~

因为桃美丽的女孩子比桃之卵便宜很多,所以也有无数专营商用桃美人当作桃之卵欺骗买家,而且桃美人出了状态也是粉铅白,所以重重人会认错

3、白牡丹,美观的普货,相比较好养,老桩也很有益于。

13、玉露,同属于笔者没养过,然而是二个自笔者以为晶莹剔透很可喜的种类,听旁人讲这么些类型对阳光供给没那么强


山地玫瑰

5、玉蝶,和子持同样是普货里面笔者比较喜欢的,分外优雅。也有人说属于普货里相对娇弱的档次,可是价格也不贵,喜欢能够入1个。

4、子持莲华,作者挺喜欢的项目,小型群生,爱爆盆,休眠期叶片收拢的容貌非凡可爱,开花会死去,即使长出花蕾就把花蕾剪掉。

1、胧月,叶子有点尖,偏冷棕褐调,俗称宝石花,挺好养,老桩也不贵,萌新可以在网上入个老桩试手。

先引进几个入门品种

11、紫珍珠,那一个种类笔者没养过,可是看人养出情形颜色比较紫,有种异域的美,不出状态的话颜色相似,不怎么赏心悦目,属于普货,应该不难养。

7、虹之玉锦,小编养过虹之玉,可是更心水虹之玉锦。虹之玉锦价格也不算贵,出了气象比虹之玉美丽,所以推举买那些,叶片掉在土里易生根,所以很简单长成一大株。

种植买那种疏松的金红园艺土就行了,不要用坚硬的黄土,新手用黄土养多肉简单死,若是钱包丰盛能够买多肉专用土,小编用的是通用型园艺土养多肉,感觉还不错。

1、熊童子,叶子像熊爪子一样,非凡讨人喜欢,看到了就想捏一把,经过普及未来的价钱也不算太贵。

最后,爱抚钱包,远离咸阳,买多肉前先问发货地,凡是扬州的永不买,不要买,不要买,什么人买何人被坑,花友都懂的/掩面..

9、锦晃星,表面柔韧的,边缘带点葱绿,相比讨人喜欢,价格也不贵。

再引进多少个比入门级别贵一点,个人爱好的连串,难度也比养普货高一些,等有经历了足以入几颗养一养

14、佛珠,属于垂吊型的多肉,长得圆圆的很讨人喜欢,此外有一种叫情人泪的和它很像

5、山地玫瑰,山地玫瑰应该有多少个连串,作者买的那一颗整个夏天都在蛰伏,但是秋冬开端疯长,挺可爱的项目

8、乙女心,相比好养的类型,和7000代的纸牌很接近,不过价格便宜多了。
七千代有木质杆,一般叶尖不会变红,但是笔者养的乙女心颜色没下图那样果冻,有点烟海洋蓝,没那样美观。

对萌新来说,建议事先挑选那多少个不畏不出颜色状态也正如为难的品类,比如玉蝶和子持莲华,因为颜料有时候不佳出,光照不够温差不够不难上连发颜色,而许多传的决意的花色不上色的花品相实在形似了。


多肉对太阳须要很强,假使长日子不给丰盛的太阳,它们会长成小怪兽的,所以记得多晒晒。

最终推荐贰个要好心水,并且很贵的品种,因为没养过由此不知底难度了