zoukankan      html  css  js  c++  java
  • 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的形式展示

  • 相关阅读:
    Building a Space Station POJ
    Networking POJ
    POJ 1251 Jungle Roads
    CodeForces
    CodeForces
    kuangbin专题 专题一 简单搜索 POJ 1426 Find The Multiple
    The Preliminary Contest for ICPC Asia Shenyang 2019 F. Honk's pool
    The Preliminary Contest for ICPC Asia Shenyang 2019 H. Texas hold'em Poker
    The Preliminary Contest for ICPC Asia Xuzhou 2019 E. XKC's basketball team
    robotparser (File Formats) – Python 中文开发手册
  • 原文地址:https://www.cnblogs.com/daomul/p/4770457.html
Copyright © 2011-2022 走看看