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

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


UIAlertController * con = [UIAlertController alertControllerWithTitle:@"新的" message:@"看看样子" preferredStyle:UIAlertControllerStyleAlert];

   [con addAction:[UIAlertAction actionWithTitle:@"仔细看" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

      //按钮触发的方法

   }]];

    [self presentViewController:con animated:YES completion:nil];

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


image.png


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


typedef NS_ENUM(NSInteger, UIAlertControllerStyle) {

   UIAlertControllerStyleActionSheet = 0,//抽屉

   UIAlertControllerStyleAlert//警告框

}

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


//初始化方法

+ (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的风格是如下的枚举:


typedef NS_ENUM(NSInteger, UIAlertActionStyle) {

   UIAlertActionStyleDefault = 0,//默认的风格

   UIAlertActionStyleCancel,//取消按钮的风格

   UIAlertActionStyleDestructive//警告的风格

}

风格效果如下:


image.png


三、UIAlertController其他属性和方法


@property (nonatomic, readonly) NSArray<UIAlertAction *> *actions;


获取所有AlertAction



@property (nonatomic, strong, nullable) UIAlertAction *preferredAction NS_AVAILABLE_IOS(9_0);


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


  image.png



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


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


[con addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {

       textField.placeholder=@"第1个";

   }];

   [con addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {

       textField.placeholder=@"第2个";

   }];

   [con addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {

       textField.placeholder=@"第3个";

   }];




@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;


获取警示控件的风格  

目录
相关文章
|
2月前
|
搜索推荐 Android开发 iOS开发
探索安卓与iOS系统的用户界面设计哲学
现代移动操作系统的设计哲学不仅仅是技术的表现,更是用户体验与功能实现的结合。本文将深入分析安卓与iOS两大主流系统在用户界面设计方面的差异与共通之处,探讨它们背后的思维模式及其对用户体验的影响。 【7月更文挑战第11天】
|
3月前
|
存储 安全 编译器
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
125 2
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
|
12天前
|
开发工具 Swift 数据安全/隐私保护
移动应用开发之旅:从零到一的iOS系统探索
【9月更文挑战第16天】在数字时代的浪潮中,移动应用成为连接用户与数字世界的桥梁。本文将带你走进iOS移动操作系统的世界,了解其架构、设计理念以及开发环境。我们将通过Swift语言的简单示例,展示如何构建一个基本的iOS应用,并探讨移动应用开发的未来趋势。无论你是编程新手还是资深开发者,这篇文章都将为你提供宝贵的见解和知识。
|
4天前
|
监控 Android开发 iOS开发
深入探索安卓与iOS的系统架构差异:理解两大移动平台的技术根基在移动技术日新月异的今天,安卓和iOS作为市场上最为流行的两个操作系统,各自拥有独特的技术特性和庞大的用户基础。本文将深入探讨这两个平台的系统架构差异,揭示它们如何支撑起各自的生态系统,并影响着全球数亿用户的使用体验。
本文通过对比分析安卓和iOS的系统架构,揭示了这两个平台在设计理念、安全性、用户体验和技术生态上的根本区别。不同于常规的技术综述,本文以深入浅出的方式,带领读者理解这些差异是如何影响应用开发、用户选择和市场趋势的。通过梳理历史脉络和未来展望,本文旨在为开发者、用户以及行业分析师提供有价值的见解,帮助大家更好地把握移动技术发展的脉络。
|
1月前
|
存储 安全 编译器
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
|
1月前
|
人工智能 自然语言处理 云计算
iOS迎来AI升级:揭秘Apple全新“智能”系统
iOS迎来AI升级:揭秘Apple全新“智能”系统
iOS迎来AI升级:揭秘Apple全新“智能”系统
|
1月前
|
iOS开发 开发者
iOS 16 系统键盘修复问题之汇编层面模拟两次返回操作的实现如何解决
iOS 16 系统键盘修复问题之汇编层面模拟两次返回操作的实现如何解决
|
1月前
|
存储 iOS开发
iOS 16 系统键盘修复问题之确定UIKeyboardTaskQueue类对_lock的加锁和解锁操作如何解决
iOS 16 系统键盘修复问题之确定UIKeyboardTaskQueue类对_lock的加锁和解锁操作如何解决
|
30天前
|
安全 Android开发 iOS开发
安卓与iOS的终极对决:哪个系统更适合你?
在智能手机的世界里,安卓和iOS两大操作系统如同两座巍峨的山峰,各自拥有庞大的用户群体。本文将深入浅出地探讨这两个系统的优缺点,并帮助你找到最适合自己的那一款。让我们一起揭开这场技术盛宴的序幕吧!
|
1月前
|
编译器 C语言 iOS开发
iOS 16 系统键盘修复问题之确定_lock是否用于保护对_deferredTasks的多线程读写如何解决
iOS 16 系统键盘修复问题之确定_lock是否用于保护对_deferredTasks的多线程读写如何解决