ADAlertController 1.0.0

ADAlertController 1.0.0

codeHuangXH 维护。



  • huangxianhuiMacBook

说明

ADAlertController 是一个类似 UIAlertController 风格的 UI 控件,包含 AlertActionSheet 以及 Ad无菌 ActionSheet(ADAlertControllerStyleSheet) 等 UI 类型。与 UIAlertController 有相似的 API。支持 iOS9+。并支持以下扩展功能

  • 支持添加自定义视图元素
  • 多种 AlertAction 可供选择,并易于扩展实现新的 AlertAction UI 样式
  • 支持优先级队列,在优先级队列里可配置以下功能
    • 支持仅在某些特定的控制器上显示
    • 支持设置黑名单

演示

Demo 1

Demo 2

Demo 3

Demo 4

Demo 5

Demo 6

使用

以下代码示例以第一张演示图片中出现的第一个例子为例

		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 类型,这个数组的内容就是警告框最终包含的按钮。

    对于ADAlertControllerStyleActionSheetADAlertControllerStyleSheet类型,若想添加取消按钮,不是将取消按钮放到最后一个,而是应该调用-addActionSheetCancelAction:来添加。

2.按钮的初始化

ADAlertAction是具体的按钮类,用来生成标题或者图片的按钮,标题或图片只能二选一显示,若同时配置二者,则优先显示标题。构造方法为+ actionWithTitle:image:style:handler:configuration:

其中handler为点击事件回调。configuration为 UI 配置相关。

若需要实现自己的按钮 UI 样式,可以参考ADAlertImageAction的实现。

另外还提供了两个ADAlertAction的子类:

  • ADAlertGroupAction:可将多个ADAlertAction作为一个按钮添加,内部的各个按钮平分宽度。
  • ADScrollableGroupActionADAlertGroupAction的子类,当按钮个数多个时,可滑动显示。

3.显示与隐藏

显示时可直接调用-show方法。想主动隐藏可以调用-hide方法。若想触摸背景也自动隐藏,可以设置ADAlertControllerConfigurationhideWhenTapBackground属性为YES

若想进入优先级队列,可以调用-enqueue

4.设置自定义视图

设置ADAlertControllercontentView为你需要的UIView对象即可,需要自己设置高度约束。建议的方法为[contentView.heightAnchor constraintEqualToConstant:100].active = YES

ADAlertControllerStyleAlert类型时,是显示在标题之上。

ADAlertControllerStyleActionSheetADAlertControllerStyleSheet类型时,显示在 message 之下。

具体用法可参考示例中的ADAdvertViewADPickerView

5.alert类型添加 UITextField

当为ADAlertControllerStyleAlert类型时可以添加textField。具体参考示例中的”添加输入框的警告框”。

目前添加UITextField 暂未适配键盘遮挡问题。

6.优先级及优先级队列

若需要显示多个AlertController又难以管理各个AlertController的显示顺序时,可以设置优先级属性alertPriority并调用入队列方法-enqueue。在内部有个优先级队列管理对象(ADAlertControllerPriorityQueue)会自动管理下一个将要显示的AlertController对象。

使用优先级队列有以下注意点:

  1. alertPriorityNSUInteger类型,虽只有三个枚举值,但可以设置任何有效的NSUInteger值。
  2. 支持设置全局的黑名单。黑名单仅支持类型,不支持具体到某个控制器实例,具体参考示例中的"黑名单时不显示”。
  3. 支持设置AlertController仅针对某个目标控制器显示。具体参考示例中的"指定在某个控制器显示”。