在 iOS 8 中,UIAlertController 在功能上是和 UIAlertView 以及
UIActionSheet 相同的,UIAlertController以一种模块化替换的方式来代替这两个的功能和作用。
" UIAlertView is deprecated. Use UIAlertController with a preferredStyle of UIAlertControllerStyleAlert instead."
"UIActionSheet is deprecated. Use UIAlertController with a preferredStyle of UIAlertControllerStyleActionSheet instead. "
一、UIAlertController的使用步骤
使用UIAlertController共需要三步:
实例化UIAlertController
实例化UIAlertAction
显示UIAlertController
1、实例化UIAlertController
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"message" preferredStyle:UIAlertControllerStyleAlert];
初始化时候需要设置样式 UIAlertControllerStyle,来确定是 Alert 还是 ActionSheet:
typedef NS_ENUM(NSInteger, UIAlertControllerStyle) {
UIAlertControllerStyleActionSheet = 0,
UIAlertControllerStyleAlert
} NS_ENUM_AVAILABLE_IOS(8_0);
2、实例化UIAlertAction
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"点击了Cancel");
}];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"点击了OK");
}];
[alertController addAction:cancelAction];
[alertController addAction:okAction];
通过创建 UIAlertAction 的实例,你可以将动作按钮添加到控制器上。
UIAlertAction 由标题字符串、样式以及当用户选中该动作时运行的代码块组成。
为了实现原来我们在创建 UIAlertView 时创建的按钮效果,我们只需创建这两个动作按钮并将它们添加到控制器上即可。
通过 UIAlertActionStyle,您可以选择如下三种动作样式:常规(default)、取消(cancel)以及警示(destruective)。
typedef NS_ENUM(NSInteger, UIAlertActionStyle) {
// 常规样式
UIAlertActionStyleDefault = 0,
// 取消样式
UIAlertActionStyleCancel,
// 警示样式,按钮字体为红色
UIAlertActionStyleDestructive
} NS_ENUM_AVAILABLE_IOS(8_0);
按钮显示的次序取决于它们添加到对话框控制器上的次序。一般来说,根据苹果官方制定的《iOS 用户界面指南》,在拥有两个按钮的对话框中,您应当将取消按钮放在左边。要注意,取消按钮是唯一的,如果您添加了第二个取消按钮,那么你就会得到如下的一个运行时异常:
‘UIAlertController can only have one action with a style of UIAlertActionStyleCancel’
2.1、UIAlertActionStyleDefault 和 UIAlertActionStyleCancel 的区别:
添加UIAlertActionStyleCancel样式后,在UIAlertAction只有两个时,UIAlertActionStyleCancel样式的action都会按苹果的默认风格把取消按钮放在左边;
添加UIAlertActionStyleCancel样式后,在UIAlertAction有三个及其以上的时候,UIAlertActionStyleCancel样式的action会显示在最下面。
而添加UIAlertActionStyleDefault样式时,与你addAction到alertController上的顺序有关。
2.2、UIAlertActionStyleDestructive 警示样式
警示样式的按钮变成了红色。根据苹果官方的定义,“警示”样式的按钮是用在可能会改变或删除数据的操作上,因此用了红色的醒目标识来警示用户。
3、显示UIAlertController
[self presentViewController:alertController animated:YES completion:nil];
主要代码:
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"message" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"点击了Cancel");
}];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"点击了OK");
}];
[alertController addAction:okAction];
[alertController addAction:cancelAction];
[self presentViewController:alertController animated:YES completion:nil];