* UIAlertController & UIAlertAction
* 1. 在iOS8中,我们失去了两个非常简单的控件,那就是UIAlertView、UIActionSheet,取而代之的是UIAlertController和UIAlertAction
* 2. 在iOS8中,UIAlertController控件使用两种样式代理题UIAlertView和UIActionSheet
* 3. 意想不到的事情是UIAlertController的父类是UIViewController,所以要想显示出来不再是之前的show方法,而是使用推出模态视图的方式推出
* 4. 在UIAlertController中,并没有按钮的添加,有的是Title和Message这样的信息显示,而按钮,则是放在UIAlertAction类中了
* 5. 如果我们想要添加一个按钮,通过创建UIAlertAction对象进行添加,按钮的事件也不再使用代理方法,而是通过Block的方式,我们可以添加多个按钮
* 6. 除此之外,UIAlertController也可以添加UITextField,UITextField的设置放在了Block内部,我们可以通过数组alertController.textFields来获取添加的输入框中的值,同样,输入框我们可以添加多个
* !!!7. !!!注意:输入框的添加只能在alertView样式下添加,如果是在actionSheet方式下添加,会造成运行时错误,所以在添加输入框前最好添加判断
*/
// 看下效果图
#pragma mark 分段控制器事件
- (IBAction)segmentedControlAction:(UISegmentedControl *)sender
{
// 1. 创建UIAlertControl变量,但并不穿GIAn
UIAlertController *alertController = nil;
// 2. 根据点击的item创建不同样式的alertController
switch (sender.selectedSegmentIndex) {
case 0: { // 弹出AlertView
alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleAlert];
break;
}
case 1: { // 弹出ActionSheet
alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleActionSheet];
break;
}
default:
break;
}
// 3. 添加取消按钮
// 3.1 UIAlertAction 表示一个按钮,同时,这个按钮带有处理事件的block
UIAlertAction *action = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
NSLog(@"取消");
}];
// 3.2 添加到alertController上
[alertController addAction:action];
// 4. 添加需要谨慎操作的按钮,文字默认是红色的
[alertController addAction:({
UIAlertAction *action = [UIAlertAction actionWithTitle:@"谨慎操作的按钮" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {
NSLog(@"谨慎操作的按钮");
}];
action;
})];
// 5. 添加确定按钮
[alertController addAction:({
UIAlertAction *action = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
NSLog(@"确定");
// 打印输入框的用户名和密码
NSString *userNameStr = [alertController.textFields[0] text];
NSString *passwordStr = [alertController.textFields[1] text];
NSLog(@"userName is: %@ password is: %@", userNameStr, passwordStr);
}];
action;
})];
// 6. 添加输入框到alertView中,注意,actionSheet是没有办法添加textField的,强行添加会Crash
if (alertController.preferredStyle == UIAlertControllerStyleAlert) {
// 添加用户名输入框
[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) {
// 给输入框设置一些信息
textField.placeholder = @"请输入用户名";
textField.textAlignment = NSTextAlignmentCenter;
}];
// 添加密码输入框
[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) {
textField.placeholder = @"请输入密码";
textField.secureTextEntry = YES;
textField.textAlignment = NSTextAlignmentCenter;
}];
}
// 7. 显示(使用模态视图推出)
[self presentViewController:alertController animated:YES completion:nil];
}