iOS8统一的系统提示控件——UIAlertController
2016-03-11 17:01
543 查看
iOS8统一的系统提示控件——UIAlertController
一、引言
相信在iOS开发中,大家对UIAlertView和UIActionSheet一定不陌生,这两个控件在UI设计中发挥了很大的作用。然而如果你用过,你会发现这两个控件的设计思路有些繁琐,通过创建设置代理来进行界面的交互,将代码逻辑分割了,并且很容易形成冗余代码。在iOS8之后,系统吸引了UIAlertController这个类,整理了UIAlertView和UIActionSheet这两个控件,在iOS中,如果你扔使用UIAlertView和UIActionSheet,系统只是会提示你使用新的方法,iOS9中,这两个类被完全弃用,但这并不说明旧的代码将不能使用,旧的代码依然可以工作很好,但是会存在隐患,UIAlertController,不仅系统推荐,使用更加方便,结构也更加合理,作为开发者,使用新的警示控件,我们何乐而不为呢。这里有旧的代码的使用方法:UIAlertView使用:http://my.oschina.net/u/2340880/blog/408873。
UIActionSheet使用:http://my.oschina.net/u/2340880/blog/409907。
二、UIAlertController的使用
从这个类的名字我们就可以看出,对于警示控件,设计的思路不再是View而是Controller。通过present和push进行呼出,而不是以前的show方法。另一个机制改变的地方是,其中按钮的触发方法不再通过代理处理,而是将按钮封装成了类:UIAlertAction。详细方法及使用如下:?
![](http://static.oschina.net/uploads/space/2015/1017/194732_LhTJ_2340880.png)
初始化方法中的preferref参数是一个枚举,决定是提示框或者抽屉列表:
?
?
?
![](http://static.oschina.net/uploads/space/2015/1017/195742_Kaxz_2340880.png)
三、UIAlertController其他属性和方法
@property (nonatomic, readonly) NSArray<UIAlertAction *>*actions;
获取所有AlertAction
@property (nonatomic, strong, nullable) UIAlertAction *preferredAction NS_AVAILABLE_IOS(9_0);
iOS9后新增加的属性,可以使某个按钮更加突出,只能设置已经在actions数组中的AkertAction,会使设置的按钮更加显眼,如下:
![](http://static.oschina.net/uploads/space/2015/1017/200351_DeEZ_2340880.png)
- (void)addTextFieldWithConfigurationHandler:(void (^ __nullable)(UITextField *textField))configurationHandler;
添加一个textField,以前的相关控件,虽然也可以添加textField,但是定制化能力非常差,这个新的方法中有一个configurationHandler代码块,可以将textField的相关设置代码放入这个代码块中,并且这个方法添加的textField个数不再限制于2个:
?
![](http://static.oschina.net/uploads/space/2015/1017/201411_W9NY_2340880.png)
@property (nullable, nonatomic, readonly) NSArray<UITextField *>
*textFields;
获取所有textField的数组
@property (nullable, nonatomic, copy) NSString *title;
设置警示控件的标题
@property (nullable, nonatomic, copy) NSString *message;
设置警示控件的信息
@property (nonatomic, readonly) UIAlertControllerStyle preferredStyle;
获取警示控件的风格
相关文章推荐
- 23. 手势识别之UIRotationGestureRecognizer
- CALayer与UIView
- 记录一下使用百度Ueditor副编辑器的过程及碰到的问题
- iOS - UILabel
- 关于UITabBarController的UITabBar隐藏问题
- Android requires compiler compliance level 5.0 or 6.0. Found '1.8' instead. 解决办法
- iOS - UIViewAnimation
- android 如何在广播里面更新 UI
- UVA 540 - Team Queue
- iOS开发UI篇—懒加载
- 使用fruitstrap实现命令行把最新IPA包更新到iPhone设备上
- iOS -UIImage
- uva 540 Team Queue
- iOS巅峰之将UIView转换成UIImage
- HTML滚动文字代码 marquee标签
- UITextView & UITextField 实现中英文混合输入的限制
- IOS_画图 图片等比压缩 IOS_UIImage
- Request failed: unacceptable content-type: text/html
- PAT (Advanced Level) Practise 1041 Be Unique (20)
- 解决[INSTALL_FAILED_UID_CHANGED]无法安装包问题