• iOS8新特性(1)——UIAlertController


    一、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的形式展示

  • 相关阅读:
    对TCP/IP协议的一些看法(12):UDP协议
    对TCP/IP协议的一些看法(11):窗口
    对TCP/IP协议的一些看法(10):TCP协议(2)
    对TCP/IP协议的一些看法(9):TCP协议(1)
    对TCP/IP协议的一些看法(8):DNS协议
    对TCP/IP协议的一些看法(7):传输层
    [BFS]翻币问题
    [BFS]骑士旅行
    [BFS]电子老鼠闯迷宫
    [BFS]P1434 [SHOI2002]滑雪
  • 原文地址:https://www.cnblogs.com/daomul/p/4770457.html
Copyright © 2020-2023  润新知