文档章节

iOS8统一的系统提示控件——UIAlertController

珲少
 珲少
发布于 2015/10/17 20:17
字数 891
阅读 5413
收藏 30
点赞 3
评论 2

iOS8统一的系统提示控件——UIAlertController

一、引言

        相信在iOS开发中,大家对UIAlertView和UIActionSheet一定不陌生,这两个控件在UI设计中发挥了很大的作用。然而如果你用过,你会发现这两个控件的设计思路有些繁琐,通过创建设置代理来进行界面的交互,将代码逻辑分割了,并且很容易形成冗余代码。在iOS8之后,系统吸引了UIAlertController这个类,整理了UIAlertView和UIActionSheet这两个控件,在iOS中,如果你扔使用UIAlertView和UIActionSheet,系统只是会提示你使用新的方法,iOS9中,这两个类被完全弃用,但这并不说明旧的代码将不能使用,旧的代码依然可以工作很好,但是会存在隐患,UIAlertController,不仅系统推荐,使用更加方便,结构也更加合理,作为开发者,使用新的警示控件,我们何乐而不为呢。这里有旧的代码的使用方法:

UIAlertView使用:http://my.oschina.net/u/2340880/blog/408873

UIActionSheet使用:http://my.oschina.net/u/2340880/blog/409907

二、UIAlertController的使用

        从这个类的名字我们就可以看出,对于警示控件,设计的思路不再是View而是Controller。通过present和push进行呼出,而不是以前的show方法。另一个机制改变的地方是,其中按钮的触发方法不再通过代理处理,而是将按钮封装成了类:UIAlertAction。详细方法及使用如下:

 UIAlertController * con = [UIAlertController alertControllerWithTitle:@"新的" message:@"看看样子" preferredStyle:UIAlertControllerStyleAlert];
    [con addAction:[UIAlertAction actionWithTitle:@"仔细看" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
       //按钮触发的方法
    }]];
     [self presentViewController:con animated:YES completion:nil];

上面的代码,会在屏幕上呼出警告框,如下:

初始化方法中的preferref参数是一个枚举,决定是提示框或者抽屉列表:

typedef NS_ENUM(NSInteger, UIAlertControllerStyle) {
    UIAlertControllerStyleActionSheet = 0,//抽屉
    UIAlertControllerStyleAlert//警告框
}

上面的addAction方法添加了一个封装了方法的按钮,UIAlertAction类的构造十分简单,如下:

//初始化方法
+ (instancetype)actionWithTitle:(nullable NSString *)title style:(UIAlertActionStyle)style handler:(void (^ __nullable)(UIAlertAction *action))handler;
//获取标题
@property (nullable, nonatomic, readonly) NSString *title;
//获取风格
@property (nonatomic, readonly) UIAlertActionStyle style;
//设置是否有效
@property (nonatomic, getter=isEnabled) BOOL enabled;

AlertAction的风格是如下的枚举:

typedef NS_ENUM(NSInteger, UIAlertActionStyle) {
    UIAlertActionStyleDefault = 0,//默认的风格
    UIAlertActionStyleCancel,//取消按钮的风格
    UIAlertActionStyleDestructive//警告的风格
}

风格效果如下:

三、UIAlertController其他属性和方法

@property (nonatomic, readonly) NSArray<UIAlertAction *> *actions;

获取所有AlertAction

 

@property (nonatomic, strong, nullable) UIAlertAction *preferredAction NS_AVAILABLE_IOS(9_0);

iOS9后新增加的属性,可以使某个按钮更加突出,只能设置已经在actions数组中的AkertAction,会使设置的按钮更加显眼,如下:

     

 

- (void)addTextFieldWithConfigurationHandler:(void (^ __nullable)(UITextField *textField))configurationHandler;

添加一个textField,以前的相关控件,虽然也可以添加textField,但是定制化能力非常差,这个新的方法中有一个configurationHandler代码块,可以将textField的相关设置代码放入这个代码块中,并且这个方法添加的textField个数不再限制于2个:

 [con addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.placeholder=@"第1个";
    }];
    [con addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.placeholder=@"第2个";
    }];
    [con addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
        textField.placeholder=@"第3个";
    }];

 

@property (nullable, nonatomic, readonly) NSArray<UITextField *> *textFields;

获取所有textField的数组

 

@property (nullable, nonatomic, copy) NSString *title;

设置警示控件的标题

 

 

@property (nullable, nonatomic, copy) NSString *message;

设置警示控件的信息

 

 

@property (nonatomic, readonly) UIAlertControllerStyle preferredStyle;

获取警示控件的风格  

专注技术,热爱生活,交流技术,也做朋友。

——珲少 QQ群:203317592

© 著作权归作者所有

共有 人打赏支持
珲少

珲少

粉丝 837
博文 375
码字总数 440447
作品 0
上海
iOS工程师
加载中

评论(2)

C
ChapherChen
hello[0]
C
ChapherChen
good[12]
FIFO和LIFO自动管理modal控制器

在一个App中,弹窗一直是一个使用频率较高的提示类控件。苹果对用户体验方面的重视程度有多高,在弹窗的处理上就能体现出这一点来。不知你是否留意过新安装的App上的弹窗显示顺序?通常是这样...

HJaycee
2017/04/14
0
0
[Swift]UIKit学习之警告框:UIAlertController和UIAlertView

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 ......

王永濤
2015/10/21
630
0
利用iOS系统方法实现相册二维码识别功能

选择需要识别带有二维码的图片,利用系统CIQRCodeFeature*feature = [featuresobjectAtIndex:0]; NSString*scannedResult = feature.messageString;能快速识别出图片中二维码的信息。 主要实...

远航Yang
2017/10/25
0
0
iOS9使用提示框的正确实现方式

在从iOS8到iOS9的升级过程中,弹出提示框的方式有了很大的改变,在Xcode7 ,iOS9.0的SDK中,已经明确提示不再推荐使用UIAlertView,而只能使用UIAlertController,我们通过代码来演示一下。 ...

海二少
2016/03/10
23
1
iOS8新特性扩展(Extension)应用之四——自定义键盘控件

iOS8新特性扩展(Extension)应用之四——自定义键盘控件 iOS8系统的开放第三方键盘,使得用户在输入法的选择上更加自主灵活,也更加贴近不同语言的输入风格。这篇博客,将介绍如何开发一个第三...

珲少
2015/07/31
0
9
UIAlertView和ActionSheet抛弃后的,使用UIAlertController代替

你知道 、 (以及它们各自的 delegate protocols) 在 iOS 8 中已经被废弃了吗? 这是真的。在你的代码中按住 ⌘ 点击 或者 ,你就会看到最上面的注释: is deprecated. Use with a of instead...

issac宝华
2016/08/30
85
0
实际案例讲解iOS设计模式——MVC模式

MVC模式是iOS编程中提到的最多次的设计模式,也是使用最频繁的设计模式之一。网络上有很多的MVC模式的分析文章,但都是从原理上来解释,很少能找到配套的案例来说明到底在实际的项目中要如何...

Stefen123
2015/11/13
0
0
iOS开发UINavigation系列四——导航控制器UINavigationController

iOS开发UINavigation系列四——导航控制器UINavigationController 一、引言 在前面的博客中,我么你介绍了UINavigationBar,UINavigationItem和UIToolBar,UINavigationController是将这些控...

珲少
2015/11/10
0
1
Xcode关于警告AutomaticPreferredMaxLayoutWidth的消除方法

Xcode关于警告AutomaticPreferredMaxLayoutWidth的消除方法 在iOS开发中,如果使用到了storyboard与xib文件并且使用autolayout进行自动布局,有时会报出Automatic Preferred Max Layout Widt...

珲少
2016/04/12
906
0
iOS8新特性扩展(Extension)应用之二——分享插件

iOS8新特性扩展(Extension)应用之二——分享插件 在上一篇博客中,介绍了iOS8新特性扩展功能之一的Today功能:http://my.oschina.net/u/2340880/blog/485533,这里我们再介绍一下分享的扩展功...

珲少
2015/07/30
0
3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MyBatis源码解读之延迟加载

1. 目的 本文主要解读MyBatis 延迟加载实现原理 2. 延迟加载如何使用 Setting 参数配置 设置参数 描述 有效值 默认值 lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延...

无忌
8分钟前
0
0
javascript 类变量的实现

代码如下: function echo(){ for(let i=0;i<arguments.length;i++) console.log(arguments[i]);}function extend(o, p){for (prop in p) {o[prop] = p[prop]}retur......

backbye
12分钟前
0
2
编程语言对比分析:Python与Java和JavaScript(图)

编程语言对比分析:Python与Java和JavaScript(图): 凭什么说“Python 太慢,Java 太笨拙,我讨厌 JavaScript”?[图] 编程语言生而为何? 我们人类从原始社会就是用语言表达自己,互相沟通...

原创小博客
20分钟前
0
0
Akka构建Reactive应用《one》

看到这Akka的官网,描述使用java或者scala构建响应式,并发和分布式应用更加简单,听着很高级的样子,下面的小字写着消息驱动,但是在quickstart里面又写容错事件驱动,就是这么钻牛角尖。 ...

woshixin
32分钟前
0
0
ffmpeg源码分析 (四)

io_open 承接上一篇,对于avformat_open_input的分析还差其中非常重要的一步,就是io_open,该函数用于打开FFmpeg的输入输出文件。 在init_input中有这么一句 if ((ret = s->io_open(s, &s-...

街角的小丑
33分钟前
0
0
String,StringBuffer ,StringBuilder的区别

不同点 一、基类不同 StringBuffer、StringBuilder 都继承自AbStractStringBuilder,String 直接继承自 Object 2、底层容器“不同” 虽然底层都是字符数组,但是String的是final修饰的不可变...

不开心的时候不要学习
49分钟前
0
0
nodejs 文件操作

写文件code // 加载文件模块var fs = require("fs");var content = 'Hello World, 你好世界!';//params 文件名,内容,编码,回调fs.writeFile('./hello.txt',content,'utf8',function (er......

yanhl
51分钟前
0
0
SpringBoot mybits 查询为0条数据 但是在Navicat 中可以查询到数据

1.页面请求: 数据库查询: 2018-07-16 17:56:25.054 DEBUG 17312 --- [nio-9010-exec-3] c.s.h.m.C.selectSelective : ==> Preparing: select id, card_number, customer_id, customer_nam......

kuchawyz
今天
0
0
译:Self-Modifying cod 和cacheflush

date: 2014-11-26 09:53 翻译自: http://community.arm.com/groups/processors/blog/2010/02/17/caches-and-self-modifying-code Cache处在CPU核心与内存存储器之间,它给我们的感觉是,它具......

我叫半桶水
今天
0
0
Artificial Intelligence Yourself

TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流...

孟飞阳
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部