@interface MainViewController ()
@end
@implementation MainViewController
/* 创建UIAlertController对象 */
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"My Alert" message:@"WELCOME" preferredStyle:UIAlertControllerStyleAlert];
/* 设置提示标题 */
alertController.title = @"My Alert";
/* 设置提示信息 */
alertController.message = @"WELCOME";
/* 设置提示风格 */
/*
typedef enum UIAlertControllerStyle: NSInteger {
UIAlertControllerStyleActionSheet = 0, 上拉菜单样式
UIAlertControllerStyleAlert 对话框样式
} UIAlertControllerStyle;
*/
/* 创建UIAlertAction对象, 添加到控制器上 */
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
}];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancle" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
}];
/* 设置动作按钮是否能够被使用, 默认为YES*/
okAction.enabled = YES;
/* 设置动作按钮风格 */
/*
typedef enum UIAlertActionStyle: NSInteger {
UIAlertActionStyleDefault = 0, 默认风格
UIAlertActionStyleCancel, 取消操作风格, 点击不会更改任何事情
要注意,取消按钮是唯一的,如果您添加了第二个取消按钮,那么你运行时会异常
UIAlertActionStyleDestructive 消除风格, 点击可能会改变或删除数据
} UIAlertActionStyle;
*/
/* 在提示上加一个文本输入框, 只有在对话框样式下使用 */
[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) {
textField.placeholder = @"账号";
/* 得到通知并自动更新 */
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(alertTextFieldDidChange:) name:UITextFieldTextDidChangeNotification object:textField];
}];
[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) {
textField.placeholder = @"密码";
textField.secureTextEntry = YES;
}];
/* 添加动作 */
[alertController addAction:cancelAction];
[alertController addAction:okAction];
/* 冻结OK按钮*/
okAction.enabled = NO;
/* 显示对话框视图控制器 */
[self presentViewController:alertController animated:YES completion:^{
}];
/* UIAlertControllerStyle 选择上拉菜单模式 */
UIAlertController *alertController2 = [UIAlertController alertControllerWithTitle:@"保存或删除数据" message:@"数据删除不可恢复" preferredStyle:UIAlertControllerStyleActionSheet];
/* 创建UIAlertAction对象, 添加到控制器上 */
/* UIAlertController在使用弹出框的时候自动移除了取消按钮。用户通过点击弹出框的外围部分来实现取消操作,因此取消按钮便不再必需。 */
/* 如果上拉菜单中有“取消”按钮的话,那么它永远都会出现在菜单的底部,不管添加的次序是如何(就是这么任性) */
UIAlertAction *cancelAction2 = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
}];
/* 《iOS 用户界面指南》要求所有的“毁坏”样式按钮都必须排名第一 */
UIAlertAction *deleteAction = [UIAlertAction actionWithTitle:@"删除" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {
}];
UIAlertAction *archiveAction = [UIAlertAction actionWithTitle:@"保存" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
}];
[alertController2 addAction:cancelAction2];
[alertController2 addAction:deleteAction];
[alertController2 addAction:archiveAction];
/* 显示上拉菜单视图控制器 注意:当有对话框样式的提示时, 上拉菜单样式将不会被显示, 请先将显示对话框视图控制器注掉 */
[self presentViewController:alertController2 animated:YES completion:^{
}];
/* UIPopoverPresentationController类同样是iOS8中新出现的类, 用来替换UIPopoverController的。这个时候上拉菜单是以一个固定在源按钮上的弹出框的形式显示的。 */
UIPopoverPresentationController *popover = alertController2.popoverPresentationController;
if (popover) {
popover.sourceView = self.view;
popover.sourceRect = self.view.bounds;
popover.permittedArrowDirections = UIPopoverArrowDirectionAny;
}
}
/* 激活OK按钮前检查”账号”文本框的内容, 如果文本长度大于2, 则激活 */
- (void)alertTextFieldDidChange:(NSNotification *)notification
{
UIAlertController alertController = (UIAlertController )self.presentedViewController;
if (alertController) {
UITextField *login = alertController.textFields.firstObject;
UIAlertAction *okAction = alertController.actions.lastObject;
okAction.enabled = login.text.length > 2;
}
}