开始使用 UIAlertController 吧

UIAlertView 与 UIActionSheet

  • UIAlertView
    • 样式

    • 实现

      - (void)showAlertView {
          self.alertView = [[UIAlertView alloc] initWithTitle:@"确定操作吗?" message:@"确定可能会有灾难哦!" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
          self.alertView.delegate = self;
          [self.alertView show];
      }
      
    • 注意

      • 其“确定”按钮的颜色与“取消”按钮的外观一样(没有显示红色,即 normal)
  • UIActionSheet
    • 样式

    • 实现

      - (void)showActionSheet {
          self.actionSheet = [[UIActionSheet alloc] initWithTitle:@"确定操作吗?" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"确定" otherButtonTitles:nil, nil];
          [self.actionSheet showInView:self.view];
      }
      
    • 注意

      • 其“确定”按钮的颜色与“取消”按钮的外观不一样(显示红色,即 destructive)

UIAlertController

  • 概述

    • UIAlertController出现的原因,我想就不必多说了。来看看苹果官方的介绍吧!

        A UIAlertController object displays an alert message to the user. This class replaces the UIActionSheet and UIAlertView classes for displaying alerts. After configuring the alert controller with the actions and style you want, present it using the presentViewController:animated:completion: method UIAlertController 
        
        实例是用来向用户警告信息的。该类旨在替代 UIActionSheet 和 UIAlertView。若你按照自己的需求配置了 UIAlertController 的 actions 和 style,就使用 presentViewController:animated:completion: 方法来显示它吧
      
  • UIAlertController 的使用步骤

    • 初始化 UIAlertController, 并设置标题,副标题,alert的样式(alert 或 actionSheet)
    • 添加事件
      • 使用 UIAlertAction 定义每一个事件,与事件相关的 title、style、action
      • style
        • UIAlertActionStyleDefault
        • UIAlertActionStyleCancel
        • UIAlertActionStyleDestructive
      • action
        • 使用 block 代替了原来的 代理模式
    • 显示 alert
  • UIAlertController 的简单使用

    • 显示 alertView

      • 初始化 UIAlertController

        self.alertController = [UIAlertController alertControllerWithTitle:@"确定操作吗?" message:@"确定可能会有灾难哦!" preferredStyle:UIAlertControllerStyleAlert];
        
      • 添加事件(事件的添加顺序,会影响按钮的显示顺序

        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            //TODO:
        }];
        [self.alertController addAction:cancelAction];
        UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
            //TODO:
        }];
        [self.alertController addAction:confirmAction];
        
      • 显示 alert

        [self presentViewController:self.alertController animated:YES completion:^{
            // TODO
        }];
        
    • 显示 actionSheet

      • 在此就不再贴代码了,把 上述代码的 UIAlertControllerStyleAlert 改成 UIAlertControllerStyleActionSheet 试试吧

UIAlertController 中的 textField

  • 注意
    • 只能向 alert 类型的 UIAlertController 中添加 textField

    • 向 actionSheet 类型的 UIAlertController 中添加 textField,会报运行时错误

      Text fields can only be added to an alert controller of style UIAlertControllerStyleAlert

  • 使用 UIAlertController 实现登录界面(demo
    • 效果

    • 具体实现

      • 使用 CocoaPods 集成 MBProgressHUD 框架(CocoaPods的安装和使用那些事(Xcode 7.2,iOS 9.2,Swift)
        • 编辑 podfile 文件,如下:

        • 为了使用的方便,通常会为 MBProgressHUD 添加分类,在此只添加 showMessage 方法,如下

          + (void)showMessage:(NSString *)message {
              // hud 显示的 view
              UIView *contentView = [[UIApplication sharedApplication].windows lastObject];
              // hud
              MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:contentView animated:YES];
              // hud 显示的信息
              hud.detailsLabelText = message;
              // 当 hud 隐藏时是否从父控件中移除
              hud.removeFromSuperViewOnHide = YES;
              // hub 显示的时间
              [hud hide:YES afterDelay:1.5f];
          }
          
      • 设置 UIAlertController
        • 初始化 UIAlertController

          self.alertController = [UIAlertController alertControllerWithTitle:@"登录" message:nil preferredStyle:UIAlertControllerStyleAlert];
          
        • 添加 textField(textField 与 action 的添加顺序,不影响其显示顺序)

          [self.alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
              textField.placeholder = @"账户";
          }];
          [self.alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
              textField.placeholder = @"密码";
          }];
          
        • 添加事件

          UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
              // TODO:
          }];
          [self.alertController addAction:cancelAction];
          UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
              // get the account and password
              UITextField *accountTextField = self.alertController.textFields[0];
              UITextField *passwordTextField = self.alertController.textFields[1];
              NSString *message = [NSString stringWithFormat:@"账户:%@\n密码:%@", accountTextField.text, passwordTextField.text];
              // 显示 MBProgressHUD(需要在主线程中显示)
              dispatch_async(dispatch_get_main_queue(), ^{
                  [MBProgressHUD showMessage:message];
              });
          }];
          [self.alertController addAction:confirmAction];
          
        • 显示 alert

          [self presentViewController:self.alertController animated:YES completion:^{
              // TODO
          }];
          
posted @ 2016-03-28 17:51  世俗孤岛  阅读(819)  评论(0编辑  收藏  举报