苹果不断的推出一些新的方法去代替老的方法,而推出这些方法的主要思想就是"统一",也可以理解为把一些相似的功能整合到一个控件或者方法里面,下面要说的就是UIAlertController
.
/
在iOS8 之后推出的UIAlertController
其实就是对iOS8之前所用的两个控件UIActionSheet
和UIAlertView
的整合,打开Xcode你会发现iOS8之后这两个方法都被弃用了,因为UIAlertController
拥有了两个控件的所有功能.
下面就是代码测试
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
// 危险操作:弹框提醒
// iOS8 开始:UIAlertController 包含以上两个的功能
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"警告" message:@"你有严重的病症" preferredStyle:UIAlertControllerStyleAlert];
// 添加按钮
__weak typeof (alert)temp = alert; // 防止block循环引用,导致alert控制器无法自动销毁
[alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
// 获取文字
NSString *text = [temp.textFields.firstObject text];
NSString *text1 = [temp.textFields.lastObject text];
NSLog(@"你想做的事情,第一个文本框的文字是: %@,第二个文本框的文字是: %@",text,text1);
}]];
[alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
}]];
[alert addAction:[UIAlertAction actionWithTitle:@"其他" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
}]];
/*
UIAlertActionStyleDefault = 0, // 默认
UIAlertActionStyleCancel, // 取消类
UIAlertActionStyleDestructive // 销毁性的按钮
*/
// 添加文本框(只能在UIAlertControllerStyleAlert添加文本框)
[alert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
// 可以通过设置textField的属性达到相应的效果
textField.textColor = [UIColor redColor];
// 监听文字改变
// 以通知的方式监听文字改变的话要在点击确定|取消按钮的时候销毁通知,认不是用dealloc
// [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userChange:) name:UITextFieldTextDidChangeNotification object:textField];
// UITextField 继承自UIControl
[textField addTarget:self action:@selector(userChange:) forControlEvents:UIControlEventEditingChanged];
}];
/*
// 通过以下属性可以看出,我们可以监听键盘弹出,和键盘隐藏
UIControlEventEditingDidBegin // 开始编辑
UIControlEventEditingChanged // 正在编辑
UIControlEventEditingDidEnd // 结束编辑
UIControlEventEditingDidEndOnExit // 退出编辑
*/
[alert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
textField.secureTextEntry = YES;
}];
// 因为是控制器类型,所以:
[self presentViewController:alert animated:YES completion:nil];
}
// 这样既可以监听文字的改变,又可以获取到改变的文字
- (void)userChange:(UITextField *)name
{
NSLog(@"%@",name);
}