iOS8统一的系统提示控件——UIAlertController

简介:

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。详细方法及使用如下:

?
1
2
3
4
5
  UIAlertController * con = [UIAlertController alertControllerWithTitle:@ "新的"  message:@ "看看样子"  preferredStyle:UIAlertControllerStyleAlert];
     [con addAction:[UIAlertAction actionWithTitle:@ "仔细看"  style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
        //按钮触发的方法
     }]];
      [self presentViewController:con animated:YES completion:nil];

上面的代码,会在屏幕上呼出警告框,如下:

194732_LhTJ_2340880.png

初始化方法中的preferref参数是一个枚举,决定是提示框或者抽屉列表:

?
1
2
3
4
typedef  NS_ENUM(NSInteger, UIAlertControllerStyle) {
     UIAlertControllerStyleActionSheet = 0, //抽屉
     UIAlertControllerStyleAlert //警告框
}

上面的addAction方法添加了一个封装了方法的按钮,UIAlertAction类的构造十分简单,如下:

?
1
2
3
4
5
6
7
8
//初始化方法
+ (instancetype)actionWithTitle:(nullable NSString *)title style:(UIAlertActionStyle)style handler:( void  (^ __nullable)(UIAlertAction *action))handler;
//获取标题
@property (nullable, nonatomic, readonly) NSString *title;
//获取风格
@property (nonatomic, readonly) UIAlertActionStyle style;
//设置是否有效
@property (nonatomic, getter=isEnabled)  BOOL  enabled;

AlertAction的风格是如下的枚举:

?
1
2
3
4
5
typedef  NS_ENUM(NSInteger, UIAlertActionStyle) {
     UIAlertActionStyleDefault = 0, //默认的风格
     UIAlertActionStyleCancel, //取消按钮的风格
     UIAlertActionStyleDestructive //警告的风格
}

风格效果如下:

195742_Kaxz_2340880.png

三、UIAlertController其他属性和方法

@property (nonatomicreadonlyNSArray<UIAlertAction *> *actions;

获取所有AlertAction


@property (nonatomicstrongnullableUIAlertAction *preferredAction NS_AVAILABLE_IOS(9_0);

iOS9后新增加的属性,可以使某个按钮更加突出,只能设置已经在actions数组中的AkertAction,会使设置的按钮更加显眼,如下:

200351_DeEZ_2340880.png     


- (void)addTextFieldWithConfigurationHandler:(void (^ __nullable)(UITextField *textField))configurationHandler;

添加一个textField,以前的相关控件,虽然也可以添加textField,但是定制化能力非常差,这个新的方法中有一个configurationHandler代码块,可以将textField的相关设置代码放入这个代码块中,并且这个方法添加的textField个数不再限制于2个:

?
1
2
3
4
5
6
7
8
9
  [con addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
         textField.placeholder=@ "第1个" ;
     }];
     [con addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
         textField.placeholder=@ "第2个" ;
     }];
     [con addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
         textField.placeholder=@ "第3个" ;
     }];

201411_W9NY_2340880.png


@property (nullablenonatomicreadonlyNSArray<UITextField *> *textFields;

获取所有textField的数组


@property (nullablenonatomiccopyNSString *title;

设置警示控件的标题


@property (nullablenonatomiccopyNSString *message;

设置警示控件的信息


@property (nonatomicreadonlyUIAlertControllerStyle preferredStyle;

获取警示控件的风格  

目录
相关文章
|
1月前
|
搜索推荐 Android开发 iOS开发
安卓与iOS系统的用户界面设计对比分析
本文通过对安卓和iOS两大操作系统的用户界面设计进行对比分析,探讨它们在设计理念、交互方式、视觉风格等方面的差异及各自特点,旨在帮助读者更好地理解和评估不同系统的用户体验。
45 1
|
1月前
|
搜索推荐 Android开发 iOS开发
探析安卓与iOS系统的优劣
【2月更文挑战第7天】安卓与iOS是当今手机市场上最主流的两款操作系统,各有优劣。本文将从用户体验、开放程度、生态系统等方面对两者进行深入探析,以期帮助读者更好地了解它们的特点。
|
1月前
|
Android开发 数据安全/隐私保护 iOS开发
安卓与iOS系统的发展趋势与比较分析
【2月更文挑战第6天】 在移动互联网时代,安卓和iOS系统作为两大主流移动操作系统,各自呈现出不同的发展趋势。本文将从技术角度出发,对安卓和iOS系统的发展方向、特点及未来趋势进行比较分析,以期为读者提供更深入的了解和思考。
58 4
|
5天前
|
存储 安全 编译器
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
|
20天前
|
人工智能 vr&ar Android开发
安卓与iOS系统的发展趋势及影响分析
在移动互联网时代,安卓和iOS作为两大主流移动操作系统,在不断发展变化中展现出不同的特点和发展趋势。本文从技术性角度出发,分析了安卓和iOS系统的发展趋势,并探讨了它们对移动设备市场和用户体验的影响,帮助读者更好地理解当前移动操作系统的发展方向和未来可能的变化。
18 0
|
25天前
iOS16系统根据PHAsset判断是否在云上
iOS16系统根据PHAsset判断是否在云上
23 1
|
25天前
如何解决iOS16系统app首次启动总是弹出允许粘贴提示框问题
如何解决iOS16系统app首次启动总是弹出允许粘贴提示框问题
31 0
如何解决iOS16系统app首次启动总是弹出允许粘贴提示框问题
|
25天前
|
安全 开发者 iOS开发
iOS16系统手机设置开启开发者模式才能安装ipa包
iOS16系统手机设置开启开发者模式才能安装ipa包
28 1
|
25天前
|
iOS开发
iOS13.6.1系统XR手机图文按钮显示不全问题
iOS13.6.1系统XR手机图文按钮显示不全问题
24 0
|
25天前
|
iOS开发
iOS16.1系统由于一个系统弹窗无法取消,导致屏幕卡死无法关机问题及解决方案
iOS16.1系统由于一个系统弹窗无法取消,导致屏幕卡死无法关机问题及解决方案
33 0