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
          }];

开始使用 UIAlertController 吧的更多相关文章

  1. UIAlertController

    楼主在整理项目的警告,于是乎你懂的. 然后自己整理了一下以后方便自己忘了之后能及时找到它 关于UIAlertController .h文件的解析 /** 关于UIAlertController的解析 ...

  2. iOS UIAlertController跟AlertView用法一样 && otherButtonTitles:(nullable NSString *)otherButtonTitles, ... 写法

    今天写弹出框UIAlertController,用alertView习惯了,所以封装了一下,跟alertView用法一样,不说了,直接上代码: 先来了解一下otherButtonTitles:(nul ...

  3. UIAlertController使用

    // 将UIAlertController模态出来 相当于UIAlertView show 的方法// 初始化一个一个UIAlertController    // 参数preferredStyle: ...

  4. IOS UIAlertController 使用方法

    在很多种语言中,alert都表示弹窗操作,弹窗功能非常有用,不仅可以用于正式的app功能中,也可以在调试中使用.在OC中,UIAlertController类用来控制弹窗操作.在IOS 8.0之前, ...

  5. UI控件(UIAlertController)

    @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UIButton *_button = [UIBut ...

  6. UIAlertController 部分用法及属性

    //创建UIAlertController:初始化UIAlertController 需要使用alertControllerWithTitle UIAlertController *alertCont ...

  7. iOS--UIAlertView与UIAlertController和UIAlertAction之间的事儿

      iOS 8的新特性之一就是让接口更有适应性.更灵活,因此许多视图控制器的实现方式发生了巨大的变化.全新的UIPresentationController在实现视图控制器间的过渡动画效果和自适应设备 ...

  8. UI第十四节——UIAlertController

    - (void)viewDidLoad {    [super viewDidLoad];        UIButton *alertBtn = [UIButton buttonWithType:U ...

  9. iOS 8.0后使用UIAlertController

    iOS 8的新特性之一就是让接口更有适应性.更灵活,因此许多视图控制器的实现方式发生了巨大的变化.全新的UIPresentationController在实现视图控制器间的过渡动画效果和自适应设备尺寸 ...

随机推荐

  1. MySQL学习笔记十:日志管理

    1.错误日志文件 MySQL的错误日志文件记录错误信息,还会记录mysqld进程的关闭和启动的信息,但也不是什么错误信息都会记录,只记录mysqld进程运行过程中发生的关键性错误. 错误日志的启动,可 ...

  2. [c++] Callable Objects

    Five kinds of callable objects: Functions Pointers to functions Objects of a class that overloads () ...

  3. 设计数据库字段或者java中使用boolean型时需谨慎

    boolean型变量只有两个值 false和true,我们在设计数据库字段时或者定义java变量时会使用boolean,通常情况下开关类的变量使用无可非议,但请一定要考虑到扩展性. 使用前请仔细考虑一 ...

  4. 站在巨人的肩膀上---重新自定义 android- ExpandableListView 收缩类,实现列表的可收缩扩展

    距离上次更新博客,时隔略长,诸事繁琐,赶在去广州答辩之前,分享下安卓 android 中的一个 列表收缩 类---ExpandableListView 先上效果图: 如果想直接看实现此页面的代码请下滑 ...

  5. swift 中数据类型那个的转换

    在swift中关于数据类型的转换,如果参数是可选类型? 那么打印或者转换的结果 会带有Optional 字样,,

  6. ZOJ Problem Set - 1251 Box of Bricks

    这道题简单的翻译成纯数学语言就是给你n个数字,每次运算只能是加1或者减1,问经过最短几步可以使得n个数字相等 由于题目限定了n个数字一定有平均数,所以求出avg,将所有比其大的数字或者比其小的数字的差 ...

  7. 奇妙的NULL值,你知道多少

    <NULL值的多义性分析> 谈到NULL值,很多人都是很熟悉,但是深入了解后,又感觉到陌生,对其含义和用法,都无法很准确的理解.NULL在数据库和编程语言中,存在的意义和附带的含义不同. ...

  8. android 官方DrawerLayout的介绍和使用

    南尘:爱编程,爱安卓,每天进步一点点. drawerLayout是Support Library包中实现了侧滑菜单效果的控件,可以说drawerLayout是因为第三方控件如MenuDrawer等的出 ...

  9. 代码的坏味道(4)——过长参数列(Long Parameter List)

    坏味道--过长参数列(Long Parameter List) 特征 一个函数有超过3.4个入参. 问题原因 过长参数列可能是将多个算法并到一个函数中时发生的.函数中的入参可以用来控制最终选用哪个算法 ...

  10. Sql Server函数全解(一)字符串函数

    字符串函数用于对字符和二进制字符进行各种操作 1.ASCII()函数  ASCII(character_expression)函数用于返回字符串表达式中最左侧的ASCII代码值.参数character ...