iOS 8 后 UIAlertView 和  UIActionSheet 都被合并到了 UIAlertController里面。

文档原文:

Important: UIAlertView is deprecated in iOS 8. (Note that UIAlertViewDelegate is also deprecated.) To create and manage alerts in iOS 8 and later, instead use UIAlertController with a preferredStyle of UIAlertControllerStyleAlert.

In apps that run in versions of iOS
prior to iOS 8, use the UIAlertView class to display an alert message to
the user. An alert view functions similar to but differs in appearance
from an action sheet (an instance of UIActionSheet).

Use the
properties and methods defined in this class to set the title, message,
and delegate of an alert view and configure the buttons. You must set a
delegate if you add custom buttons. The delegate should conform to the
UIAlertViewDelegate protocol. Use the show method to display an alert
view once it is configured.

简单介绍一下。

一、 创建一个alert  UIAlertController:

1 UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"My Alert"
2 message:@"This is an alert."
3 preferredStyle:UIAlertControllerStyleAlert];
4
5 UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
6 handler:^(UIAlertAction * action) {}];
7
8 [alert addAction:defaultAction];
9 [self presentViewController:alert animated:YES completion:nil];

UIAlertController中,没有按钮的添加,有的事Title和Message这样的信息,按钮放在我下面要说的UIAlertAction里面;

在preferredStyle中 ,UIAlertController 提供了2中style

UIAlertControllerStyleActionSheet = 0,
    UIAlertControllerStyleAlert
分别对应UIActionSheet 和 UIAlertView。

二、 设置好style后需要添加 action,来添加按钮

按钮的事件不再使用代理方法,而是通过Block的方式添加多个按钮。

UIAlertController 也可以添加UITextField, UITextField的设置放在Block内部,可以通过数组alertController.textFields来获取的添加在输入框中的值,同样的也可以添加多个,但是必须在alertView的样式里添加,否则会报错,所以添加UITextField前需判断style是否是UIAlertView。

三、由于UIAlertController 的父类是UIViewController, 所以显示的时候,不是用show方法,而是用推出视图的方式推出。

// 主要代码

#pragma mark 分段控制器事件

- (IBAction)segmentedControlAction:(UISegmentedControl *)sender

{

// 1. 创建UIAlertControl变量,但并不穿GIAn

UIAlertController *alertController = nil;

// 2. 根据点击的item创建不同样式的alertController

switch (sender.selectedSegmentIndex) {

case 0: { // 弹出AlertView

alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleAlert];

break;

}

case 1: { // 弹出ActionSheet

alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleActionSheet];

break;

}

default:

break;

}

// 3. 添加取消按钮

// 3.1 UIAlertAction 表示一个按钮,同时,这个按钮带有处理事件的block

UIAlertAction *action = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {

NSLog(@"取消");

}];

// 3.2 添加到alertController上

[alertController addAction:action];

// 4. 添加需要谨慎操作的按钮,文字默认是红色的

[alertController addAction:({

UIAlertAction *action = [UIAlertAction actionWithTitle:@"谨慎操作的按钮" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {

NSLog(@"谨慎操作的按钮");

}];

action;

})];

// 5. 添加确定按钮

[alertController addAction:({

UIAlertAction *action = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {

NSLog(@"确定");

// 打印输入框的用户名和密码

NSString *userNameStr = [alertController.textFields[0] text];

NSString *passwordStr = [alertController.textFields[1] text];

NSLog(@"userName is: %@  password is: %@", userNameStr, passwordStr);

}];

action;

})];

// 6. 添加输入框到alertView中,注意,actionSheet是没有办法添加textField的,强行添加会Crash

if (alertController.preferredStyle == UIAlertControllerStyleAlert) {

// 添加用户名输入框

[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) {

// 给输入框设置一些信息

textField.placeholder = @"请输入用户名";

textField.textAlignment = NSTextAlignmentCenter;

}];

// 添加密码输入框

[alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) {

textField.placeholder = @"请输入密码";

textField.secureTextEntry = YES;

textField.textAlignment = NSTextAlignmentCenter;

}];

}

// 7. 显示(使用模态视图推出)

[self presentViewController:alertController animated:YES completion:nil];

}

 
 
// Demo下载地址:百度网盘

UIAlertController (UIActionSheet, UIAlertView is deprecated in iOS 8.)的更多相关文章

  1. [Swift]UIKit学习之警告框:UIAlertController和UIAlertView

    Important: UIAlertView is deprecated in iOS 8. (Note that UIAlertViewDelegate is also deprecated.) T ...

  2. IOS提示控件UIActionSheet,UIAlertView

    iphone中常用的消息提示控件,就是UIActionSheet和UIAlertView了,在Web开发中,UIActionSheet就像是confirm(),而UIAlertView就像是alert ...

  3. UIAlertView' is deprecated: first deprecated in iOS 9.0 - UIAlertView is deprecated. Use UIAlert

    UIAlertController * cancleAlertController = [UIAlertController alertControllerWithTitle:nil message: ...

  4. iOS---stringByAddingPercentEscapesUsingEncoding:' is deprecated: first deprecated in iOS 9.0 - Use -stringByAddingPercentEncodingWithAllowedCharacters: instead,

    旧方法 NSString *encoded = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; iOS9   ...

  5. UITextAlignmentCenter' is deprecated: first deprecated in iOS 6.0

  6. iOS8以后UIAlertView和UIActionSheet两种alert页面都将通过UIAlertController来创建

    1. Important: UIAlertView is deprecated in iOS 8. (Note that UIAlertViewDelegate is also deprecated. ...

  7. iOS 8及以后版本 如何创建UIAlertView?

    1. Important: UIAlertView is deprecated in iOS 8. (Note that UIAlertViewDelegate is also deprecated. ...

  8. [New learn] UIKit 框架类

    NSObject NSObject is the root class of most Objective-C class hierarchies. NSDataAsset The NSDataAss ...

  9. iOS开发之UIAlertView与UIAlertController的详尽用法说明

    本文将从四个方面对IOS开发中UIAlertView与UIAlertController的用法进行讲解: 一.UIAlertView与UIAlertController是什么东东? 二.我们为什么要用 ...

随机推荐

  1. 几种交换两个数函数(swap函数)的写法和解析

    #include <iostream> using namespace std; /*值传递,局部变量a和b的值确实在调用swap0时变化了,当结束时,他们绳命周期结束*/ void sw ...

  2. idea安装Scala插件

    最近在学习研究kafka,当我们进行debug跟踪时,就需要研究源码了.kafka的源码是Scala语言,在此就需要Scala环境来运行kafka源码了. 接下来记录的是我在IDEA中安装Scala插 ...

  3. Android学习笔记(三)Application类简介

    每次运行APP时,Application类都保持实例化状态.与Activity不同,配置改变不会导致应用程序重启.通过继承Application类,可以完成一下3项工作: · 对Android运行时广 ...

  4. BZOJ4195 [Noi2015]程序自动分析(离散化+并查集)

    4195: [Noi2015]程序自动分析 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 689  Solved: 296 [Submit][Sta ...

  5. openStack 瓶颈测试

  6. 上海Uber优步司机奖励政策(1月25日~1月31日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  7. Bridges painting - SGU 121(构造)

    题目大意:有个一无向图,给所有的边染色,如果一个点连接的边超过两个,那么最少要染一个白色和一个黑色,能否给整个图染色?不能输出“No solution”. 分析:引用连接 http://edward- ...

  8. ll 详解

    长选项必须使用的参数对于短选项时也是必需使用的.  -a, --all                     不隐藏任何以. 开始的项目  -A, --almost-all             ...

  9. wmic

    前沿:WMIC命令在我们的工作中可以帮助我们减少对其他工具的依赖并节省我们的时间,实在是一个值得学习和研究的好东西 命令很多,这里我把网上目前能找到的较实用的一些命令整理出来,希望各位看官能找到自己需 ...

  10. Maven属性、profile和资源过滤

    Maven的六类属性 内置属性 主要有两个常用内置属性:${basedir}项目的根目录(包含pom.xml文件的目录),${version}项目版本 POM属性 用户可以使用该属性引用POM文件中对 ...