开始使用 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
}];
- 使用 CocoaPods 集成 MBProgressHUD 框架(CocoaPods的安装和使用那些事(Xcode 7.2,iOS 9.2,Swift))
开始使用 UIAlertController 吧的更多相关文章
- UIAlertController
楼主在整理项目的警告,于是乎你懂的. 然后自己整理了一下以后方便自己忘了之后能及时找到它 关于UIAlertController .h文件的解析 /** 关于UIAlertController的解析 ...
- iOS UIAlertController跟AlertView用法一样 && otherButtonTitles:(nullable NSString *)otherButtonTitles, ... 写法
今天写弹出框UIAlertController,用alertView习惯了,所以封装了一下,跟alertView用法一样,不说了,直接上代码: 先来了解一下otherButtonTitles:(nul ...
- UIAlertController使用
// 将UIAlertController模态出来 相当于UIAlertView show 的方法// 初始化一个一个UIAlertController // 参数preferredStyle: ...
- IOS UIAlertController 使用方法
在很多种语言中,alert都表示弹窗操作,弹窗功能非常有用,不仅可以用于正式的app功能中,也可以在调试中使用.在OC中,UIAlertController类用来控制弹窗操作.在IOS 8.0之前, ...
- UI控件(UIAlertController)
@implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UIButton *_button = [UIBut ...
- UIAlertController 部分用法及属性
//创建UIAlertController:初始化UIAlertController 需要使用alertControllerWithTitle UIAlertController *alertCont ...
- iOS--UIAlertView与UIAlertController和UIAlertAction之间的事儿
iOS 8的新特性之一就是让接口更有适应性.更灵活,因此许多视图控制器的实现方式发生了巨大的变化.全新的UIPresentationController在实现视图控制器间的过渡动画效果和自适应设备 ...
- UI第十四节——UIAlertController
- (void)viewDidLoad { [super viewDidLoad]; UIButton *alertBtn = [UIButton buttonWithType:U ...
- iOS 8.0后使用UIAlertController
iOS 8的新特性之一就是让接口更有适应性.更灵活,因此许多视图控制器的实现方式发生了巨大的变化.全新的UIPresentationController在实现视图控制器间的过渡动画效果和自适应设备尺寸 ...
随机推荐
- 准备 KVM 实验环境 - 每天5分钟玩转 OpenStack(3)
KVM 是 OpenStack 使用最广泛的 Hypervisor,本节介绍如何搭建 KVM 实验环境 安装 KVM 上一节说了,KVM 是 2 型虚拟化,是运行在操作系统之上的,所以我们先要装一个 ...
- 如何用Perl截取报文
在实际生产环境中,常常需要从后台日志中截取报文,报文的形式类似于 <InterBOSS> ... ... ... </InterBOSS> 一个后台日志有多个报文,每个报文可由 ...
- Int,Long比较重使用equal替换==
首先,==有很多限制,如Integer 类型的值在[-128,127] 期间,Integer 用 “==”是可以的(参考),超过范围则不行,那么使用equal则代替则完全ok public stati ...
- Oracle在线重定义DBMS_REDEFINITION 普通表—>分区表
实验环境:RHEL 6.4 + Oracle 11.2.0.3实验:在线重定义 普通表 为 分区表,包括主键对应的索引都改造为分区索引. 1,构造普通表t_objects conn test1/tes ...
- lamp 环境搭建
LAMP指的Linux(操作系统).ApacheHTTP 服务器,MySQL(数据库软件)和PHP语言 使用wampserver软件,搭建环境.如下图: 双击程序包,安装最后一步随便选择一个浏览器打开 ...
- 基本的window.document操作及实例
基本的window.document操作及实例 找元素 1.根据id找 var d1 = document.getElementById("d1"); alert(d1); 2.根 ...
- Service实现文件下载
首先在Activity中声明Intent对象,启动Service: //生成Intent对象 Intent intent = new Intent(); //将文件名对象存入到intent对象当中 i ...
- Easyui datagrid行内【添加】、【编辑】、【上移】、【下移】
前几天项目中遇到一个需求用到了Easyui datagrd行内添加和编辑数据,同时对行内数据上移下移,所以对这几个功能做个总结. 1.首先大概说下这几个功能里用到的主要方法,行内添加数据主要是添加列的 ...
- 深入剖析tomcat之一个简单的web服务器
这个简单的web服务器包含三个类 HttpServer Request Response 在应用程序的入口点,也就是静态main函数中,创建一个HttpServer实例,然后调用其await()方法. ...
- GUI 和 GUILayout 的区别
GUI 和 GUILayout 的区别 A~ GUI是Unity中的基础控件类,其中包含了常用的GUI控件,列如Button,Label,PasswordField,slider,Window等等~ ...