iOS:UIAlertController和UIAlertAction的详解
提示框控制器:UIAlertController
typedef NS_ENUM(NSInteger, UIAlertControllerStyle) {
UIAlertControllerStyleActionSheet = 0, //在视图底部弹出的提示框,它不能添加文本框,而且在ipad中必须使用popover形式展示
UIAlertControllerStyleAlert //在视图中间弹出的提示框
} NS_ENUM_AVAILABLE_IOS(8_0);
typedef NS_ENUM(NSInteger, UIAlertActionStyle) {
UIAlertActionStyleDefault = 0, //默认的确认按钮
UIAlertActionStyleCancel, //默认的取消按钮
UIAlertActionStyleDestructive //默认的红色按钮
}NS_ENUM_AVAILABLE_IOS(8_0);
3、UIAlertController:提示框控制器类
@interface UIAlertController : UIViewController
方法:
//创建提示框控制器的类方法
+ (instancetype)alertControllerWithTitle:(NSString *)title message:(NSString *)message preferredStyle:(UIAlertControllerStyle)preferredStyle;
//在提示框上添加文本框的实例方法(只能在UIAlertView风格的提示框添加)
- (void)addTextFieldWithConfigurationHandler:(void (^)(UITextField *textField))configurationHandler;
//在提示框上添加按钮
- (void)addAction:(UIAlertAction *)action;
属性:
//提示框上存放所有按钮的数组
@property (nonatomic, readonly) NSArray *actions;
//提示框上存放所有文本框的数组
@property (nonatomic, readonly) NSArray *textFields;
//提示框的标题
@property (nonatomic, copy) NSString *title;
//提示信息
@property (nonatomic, copy) NSString *message;
//提示框控制器的风格
@property (nonatomic, readonly) UIAlertControllerStyle preferredStyle;
@end
4、UIAlertAction:提示框按钮
@interface UIAlertAction : NSObject <NSCopying>
方法:
//创建提示框按钮的类方法
+ (instancetype)actionWithTitle:(NSString *)title style:(UIAlertActionStyle)style handler:(void (^)(UIAlertAction *action))handler;
属性:
//按钮标题
@property (nonatomic, readonly) NSString *title;
//按钮的风格
@property (nonatomic, readonly) UIAlertActionStyle style;
//按钮是否有效
@property (nonatomic, getter=isEnabled) BOOL enabled;
@end
具体的实例如下:
创建步骤:
1、布局故事板,在控制器的视图中拖入一个按钮,并关联IBAction事件
2、在按钮的关联事件中的主要代码如下:
//创建提示框控制器
//创建提示框控制器 UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示框" message:@"消息" preferredStyle:UIAlertControllerStyleAlert]; alertController.view.backgroundColor = [UIColor purpleColor];
//创建提示框按钮
//创建提示按钮 UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"默认Cancel" style:UIAlertActionStyleCancel handler:nil]; UIAlertAction *action2 = [UIAlertAction actionWithTitle:@"默认Default" style:UIAlertActionStyleDefault handler:nil]; UIAlertAction *action3 = [UIAlertAction actionWithTitle:@"默认Destructive" style:UIAlertActionStyleDestructive handler:nil];
//添加提示按钮到提示框中
//添加提示按钮 [alertController addAction:action1]; [alertController addAction:action2]; [alertController addAction:action3];
//添加文本框到提示框中(只适合提示框风格为:UIAlertControllerStyleAlert)
//添加文本框(只适合alertview类型的提示框) [alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) { textField.placeholder = @"账号"; }]; [alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) { textField.placeholder = @"密码"; textField.secureTextEntry = YES; //安全输入模式 }];
//给文本框添加监听事件
//给文本框添加监听事件(文本框的开始、结束、状态改变等) [alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) { textField.placeholder = @"添加监听事件"; [textField addTarget:self action:@selector(alertTextFiledDidChanged:) forControlEvents:UIControlEventEditingChanged]; }];
//以模态窗口的形式显示提示框
[self presentViewController:alertController animated:YES completion:nil];
//实现文本框事件
#pragma mark 文本框监听事件 -(void)alertTextFiledDidChanged:(NSNotification *)notification { NSLog(@"Enditing changed"); }
//点击按钮,显示演示结果
当没有添加action3按钮到提示框,即按钮个数<=2时,两种提示框的样式截图为:
UIAlertControllerStyleAlert:从屏幕中间弹出
UIAlertControllerStyleActionSheet:从屏幕底部弹出(不能添加文本框)
当没有添加action3按钮到提示框,即按钮个数>=3时,两种提示框的样式截图为:
UIAlertControllerStyleAlert:从屏幕中间弹出
UIAlertControllerStyleActionSheet:从屏幕底部弹出(不能添加文本框)