UIAlertController是iOS8推出的新概念,取代了以前的 UIAlertView和UIActionSheet(现在仍可使用,但会有警告)。
UIAlertController 替代了 UIAlertView 和 UIActionSheet,拥有他们两个所有的功能,从系统层级上统一了 alert 的概念 —— 即以 modal 方式或 popover 方式展示。
UIAlertController 是 UIViewController 的子类,而非其先前的方式。因此新的 alert 可以由 view controller 展示相关的配置中获益很多。
UIAlertController 不管是要用 alert 还是 action sheet 方式展示,都要以 title 和 message 参数来初始化。Alert 会在当前显示的 view controller 中心以模态形式出现,action sheet 则会在底部滑出。Alert 可以同时有按钮和输入框,action sheet 仅支持按钮。
新的方式并没有把所有的 alert 按钮配置都放在初始化函数中,而是引入了一个新类 UIAlertAction 的对象,在初始化之后可以进行配置。这种形式的 API 重构让对按钮数量、类型、顺序方便有了更大的控制。同时也弃用了 UIAlertView 和 UIActionSheet 使用的delegate 这种方式,而是采用更简便的完成时回调。
一)新旧对比:
1.标准的Alert Sheet样式:
旧方法:UIActionSheet:
UIActionSheet *actionSheet = [[UIActionSheet alloc]initWithTitle:@"点击的是代言按钮"
delegate:self
cancelButtonTitle:@"取消"destructiveButtonTitle:@"轻斟浅醉17好帅"otherButtonTitles:@"轻斟浅醉17真的好帅", nil];[actionSheet showInView:self.view];
新方法:UIAlertController
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"点击的是代言按钮"message:nil
preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
[alertController addAction:cancelAction];
UIAlertAction *moreAction = [UIAlertAction actionWithTitle:@"轻斟浅醉17好帅" style:UIAlertActionStyleDestructive handler:nil];
[alertController addAction:moreAction];
UIAlertAction *OKAction = [UIAlertAction actionWithTitle:@"轻斟浅醉17真的好帅" style:UIAlertActionStyleDefault handler:nil];
[alertController addAction:OKAction];
[self presentViewController:alertController animated:YES completion:nil];
2.标准的Alert样式:
旧方法:UIAlertView:
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"点击的是代言按钮"
message:@"轻斟浅醉17好帅"delegate:self cancelButtonTitle:@"就是帅" otherButtonTitles:@"没错", nil];
//显示alertView
[alertView show];
新方法:UIAlertController:
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"点击的是代言按钮"
message:@"轻斟浅醉17好帅"preferredStyle:UIAlertControllerStyleAlert ];
UIAlertAction *Action = [UIAlertAction actionWithTitle:@"就是帅" style:UIAlertActionStyleDefault handler:nil];
[alert addAction:Action];
UIAlertAction *Action1 = [UIAlertAction actionWithTitle:@"没错" style:UIAlertActionStyleDefault handler:nil];
[alert addAction:Action1];
[self presentViewController:alert animated:YES completion:nil];
UIAlertController还可以设置多个Alert
再有2个以内操作的时候,按钮会水平排布。更多按钮的情况,就会像 action sheet 那样展示