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. jQuery源码 Ajax模块分析

    写在前面: 先讲讲ajax中的相关函数,然后结合函数功能来具体分析源代码. 相关函数: >>ajax全局事件处理程序 .ajaxStart(handler) 注册一个ajaxStart事件 ...

  2. 【实时】DevExpress内存监视

    前言 在做项目的时候,我们有时候需要检测项目的内存占用情况,有时候是检测内存泄露~,有时候是查看某段代码执行前后的内存对比,以方便找出问题并以解决. 内存泄漏也称作“存储渗漏”,用动态存储分配函数动态 ...

  3. C/C++ 双精度double 数据相加出错缺陷解释

    不知道有没有人和我一样遇到过这样一个问题,请看下面代码. #include<iostream> using namespace std; int main(){ double a=2.3, ...

  4. C语言 第四章 分支结构练习

    一.输入语文,数学成绩,根据平均分分3档 #include "stdio.h" void main() { //接受用户输入 float chinese,math,avg; pri ...

  5. ubuntu /var/log/下文件介绍

    本文简单介绍ubuntu /var/log/下各个日志文件,方便出现错误的时候查询相应的log   /var/log/alternatives.log -更新替代信息都记录在这个文件中 /var/lo ...

  6. ASP.NET或者 js方式实现文件夹多图片浏览的方式

    1.JS方式,限制大,而且图片名称如果不规则的话会获取不全. <html> <head> <style> img { max-width:1300px; } < ...

  7. 读取SD卡文件夹下的MP3文件和播放MP3文件

    首先获取SD卡path路径下的所有的MP3文件,并将文件名和文件大小存入List数组(此代码定义在FileUtils类中): /** * 读取目录中的Mp3文件的名字和大小 */ public Lis ...

  8. 小div布局之卡片堆叠(card-stacking)

    前端的页面布局和各种效果真是让人眼花缭乱,公司的设计师恨不得在一个网站上把前端的布局和样式效果都用一遍. 如何实现下面这种布局效果?我给这种布局效果起了个名字,叫做小div布局之卡片堆叠.然后我百度了 ...

  9. react初始(2)

    既然我开始了react的学习,就没有停下来的理由了,我应该很幸运我还有这个时间去学习react,我不认为我聪明,但是我认为我够努力.我先在或许是一个不知道未来该是怎样的人,我们的迷茫和无知源于你不去接 ...

  10. web性能优化:详说浏览器缓存

    TOC 背景 浏览器的总流程图 一步一步说缓存 朴素的静态服务器 设置缓存超时时间 html5 Application Cache Last-Modified/If-Modified-Since Et ...