一、iOS8介绍
iOS8 新特性,主要是UI上进行了统一
1、UIAlertController
2、UIPresentaionController:管理所有通过modal出来的控制器(看笔记)
3、UIPopoverPresentationController
4、SizeClass + Autolayout
5、App Extension 应用扩展
6、Core Image(iOS 5开始就有了,滤镜美图秀秀型 )
二、UIAlertController
1、以往我们使用的时候,都是用的 UIAlertView和UIActionSheet
1 //选项弹出等 2 -(void)alertViewOld 3 { 4 UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"111" message:@"222" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil]; 5 alert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;//4种方式 6 [alert show]; 7 8 //如果要监听点击事件则需要去设置对应的代理,并在代理方法中操作 9 } 10 11 //底部弹出 12 -(void)aletSheetOld 13 { 14 UIActionSheet *action = [[UIActionSheet alloc]initWithTitle:@"111" delegate:nil cancelButtonTitle:@"取消" destructiveButtonTitle:@"犹豫" otherButtonTitles:@"确定", nil]; 15 16 [action showInView:self.view]; 17 }
2、而从iOS8开始, UIAlertController = UIAlertView + UIAlertSheet
1 #pragma mark -- new iOS8 2 3 -(void)new 4 { 5 //1、创建中间的弹出:UIAlertView 6 UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"标题" message:@"弹出信息" preferredStyle:UIAlertControllerStyleAlert]; 7 8 //创建底部的弹出:UIAlertSheet 9 //UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"标题" message:@"弹出信息" preferredStyle:UIAlertControllerStyleActionSheet]; 10 11 //2、添加按钮(不需要代理了) 12 13 //这里需要防止循环引用(可以通过新建一个自己的控制器继承UIAlertController,在dealloc中打印信息,验证是否有最终释放) 14 __weak typeof(alert) weakAlert = alert; 15 [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) { 16 17 NSLog(@"%@",[weakAlert.textFields.firstObject text]); 18 19 }]]; 20 [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]]; 21 [alert addAction:[UIAlertAction actionWithTitle:@"默认" style:UIAlertActionStyleDefault handler:nil]]; 22 23 //3、添加文本框(只能是添加到UIAlertControllerStyleAlert的样式,如果是preferredStyle:UIAlertControllerStyleActionSheet的话会崩溃的) 24 [alert addTextFieldWithConfigurationHandler:^(UITextField *textField) { 25 26 textField.textColor =[UIColor redColor]; 27 textField.text = @"11111"; 28 29 //监听文字的改变(如果是用通知的话,移除的时机需要注意,点击确定或者取消的时候就需要去移除,比较麻烦) 30 [textField addTarget:self action:@selector(textFieldsValueDidChange:) forControlEvents:UIControlEventEditingChanged]; 31 }]; 32 [alert addTextFieldWithConfigurationHandler:^(UITextField *textField) { 33 34 textField.secureTextEntry = YES; 35 textField.text = @"22222"; 36 }]; 37 38 //4、弹出控制器,要想是不是用modal 39 [self presentViewController:alert animated:YES completion:nil]; 40 } 41 42 -(void)textFieldsValueDidChange:(UITextField *)textField 43 { 44 NSLog(@"%@",textField.text); 45 }
3、在iPhone和iPad中同时适用的方式
1 #pragma mark -- new iOS8 in iPad 2 /** 3 * 注意: 4 UIAlertControllerStyleActionSheet 5 1、不能有文本框 6 2、在iPad中,必须使用popover的形式展示 7 8 以后都是用present 9 */ 10 -(void)newInpad 11 { 12 //1、创建底部的弹出:UIAlertSheet 13 UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"标题" message:@"弹出信息" preferredStyle:UIAlertControllerStyleActionSheet]; 14 15 // 1.1 这句代码可写可不写,因为默认就会以UIModalPresentationPopover的形式存在 16 alert.modalPresentationStyle = UIModalPresentationPopover; 17 18 // 1.2 设置popover指向按钮(这句代码iPhone中会被忽略,iPad中才会实现) 19 alert.popoverPresentationController.barButtonItem = self.navigationItem.leftBarButtonItem; 20 21 //2、添加按钮(不需要代理了) 22 23 //这里需要防止循环引用(可以通过新建一个自己的控制器继承UIAlertController,在dealloc中打印信息,验证是否有最终释放) 24 __weak typeof(alert) weakAlert = alert; 25 [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) { 26 27 NSLog(@"%@",[weakAlert.textFields.firstObject text]); 28 29 }]]; 30 [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]]; 31 [alert addAction:[UIAlertAction actionWithTitle:@"默认" style:UIAlertActionStyleDefault handler:nil]]; 32 33 //4、弹出控制器,要想是不是用modal 34 [self presentViewController:alert animated:YES completion:nil]; 35 }
注意:
UIAlertControllerStyleActionSheet
1、不能有文本框
2、在iPad中,必须使用popover的形式展示