说明
ADAlertController
是一个类似 UIAlertController
风格的 UI 控件,包含 Alert
和 ActionSheet
以及 Ad无菌 ActionSheet(ADAlertControllerStyleSheet)
等 UI 类型。与 UIAlertController
有相似的 API。支持 iOS9+。并支持以下扩展功能
- 支持添加自定义视图元素
- 多种
AlertAction
可供选择,并易于扩展实现新的AlertAction
UI 样式 - 支持优先级队列,在优先级队列里可配置以下功能
- 支持仅在某些特定的控制器上显示
- 支持设置黑名单
演示
使用
以下代码示例以第一张演示图片中出现的第一个例子为例
ADAlertAction *cancelAction = [ADAlertAction actionWithTitle:@"取消" style:ADActionStyleCancel handler:^(__kindof ADAlertAction * _Nonnull action) {
NSLog(@"点击了取消");
}];
ADAlertAction *sureAction = [ADAlertAction actionWithTitle:@"确定" style:ADActionStyleDefault handler:^(__kindof ADAlertAction * _Nonnull action) {
NSLog(@"点击了确定");
}];
ADAlertController *alertView = [[ADAlertController alloc] initWithOptions:nil title:@"这里是标题" message:nil actions:@[cancelAction,sureAction]];
[alertView show];
1.初始化
ADAlertController
使用指定构造方法来生成实例:-initWithOptions:title:message:actions:
。
-
第一个参数是
ADAlertControllerConfiguration
对象类型,可以为 nil。ADAlertControllerConfiguration
用来配置一些 UI 样式。其中的preferredStyle
属性用来指定具体的 UI 样式,有以下几个枚举类型ADAlertControllerStyleAlert
:与UIAlertControllerStyleAlert
类似ADAlertControllerStyleActionSheet
:与UIAlertControllerStyleActionSheet
类似ADAlertControllerStyleSheet
:与UIAlertControllerStyleActionSheet
类似,只是左右以及底部的边距都是 0。
preferredStyle
属性一经初始化,不得更改。ADAlertControllerConfiguration
使用指定构造方法-initWithPreferredStyle:
-
第二个,第三个参数分别表示标题和内容信息,可为 nil。
-
第三个参数是包含的按钮,可为 nil。不同于
UIAlertController
的添加按钮方法,这里添加按钮采用数组的方式。对于
ADAlertControllerStyleAlert
类型,这个数组的内容就是警告框最终包含的按钮。对于
ADAlertControllerStyleActionSheet
和ADAlertControllerStyleSheet
类型,若想添加取消按钮,不是将取消按钮放到最后一个,而是应该调用-addActionSheetCancelAction:
来添加。
2.按钮的初始化
ADAlertAction
是具体的按钮类,用来生成标题或者图片的按钮,标题或图片只能二选一显示,若同时配置二者,则优先显示标题。构造方法为+ actionWithTitle:image:style:handler:configuration:
其中handler
为点击事件回调。configuration
为 UI 配置相关。
若需要实现自己的按钮 UI 样式,可以参考ADAlertImageAction
的实现。
另外还提供了两个ADAlertAction
的子类:
ADAlertGroupAction
:可将多个ADAlertAction
作为一个按钮添加,内部的各个按钮平分宽度。ADScrollableGroupAction
:ADAlertGroupAction
的子类,当按钮个数多个时,可滑动显示。
3.显示与隐藏
显示时可直接调用-show
方法。想主动隐藏可以调用-hide
方法。若想触摸背景也自动隐藏,可以设置ADAlertControllerConfiguration
的hideWhenTapBackground
属性为YES
。
若想进入优先级队列,可以调用-enqueue
4.设置自定义视图
设置ADAlertController
的contentView
为你需要的UIView
对象即可,需要自己设置高度约束。建议的方法为[contentView.heightAnchor constraintEqualToConstant:100].active = YES
。
ADAlertControllerStyleAlert
类型时,是显示在标题之上。
ADAlertControllerStyleActionSheet
和ADAlertControllerStyleSheet
类型时,显示在 message
之下。
具体用法可参考示例中的ADAdvertView
和ADPickerView
。
5.alert类型添加 UITextField
当为ADAlertControllerStyleAlert
类型时可以添加textField
。具体参考示例中的”添加输入框的警告框”。
目前添加UITextField 暂未适配键盘遮挡问题。
6.优先级及优先级队列
若需要显示多个AlertController
又难以管理各个AlertController
的显示顺序时,可以设置优先级属性alertPriority
并调用入队列方法-enqueue
。在内部有个优先级队列管理对象(ADAlertControllerPriorityQueue
)会自动管理下一个将要显示的AlertController
对象。
使用优先级队列有以下注意点:
alertPriority
是NSUInteger
类型,虽只有三个枚举值,但可以设置任何有效的NSUInteger
值。- 支持设置全局的黑名单。黑名单仅支持类型,不支持具体到某个控制器实例,具体参考示例中的"黑名单时不显示”。
- 支持设置
AlertController
仅针对某个目标控制器显示。具体参考示例中的"指定在某个控制器显示”。