RxAlertViewable 1.2

RxAlertViewable 1.2

[Meng Li] 维护。



 
依赖项
RxSwift~> 6
RxCocoa~> 6
 

  • 作者
  • lm2343635

RxAlertViewable build_check Version License Platform

RxAlertViewable 是为使用 RxSwift 开发 MVVM 应用而创建的。它支持从带有信号 Observable<RxAlert> 的视图模型类显示简单的警报。

Demo

安装

RxAlertViewable 通过 CocoaPods 提供。要安装它,只需将以下行添加到 Podfile

pod 'RxAlertViewable'

运行演示

要运行演示应用程序,使用 CocoaPods 安装依赖项,并使用 .xcworkspace 打开项目。

pod install
open RxAlertViewable.xcworkspace

文档

要使用RxAlertViewable,首先在视图控制器类中确认使用了RxAlertViewable协议。

class ViewController: UIViewController, RxAlertViewable {}

警报

在你的视图模型类中准备一个PublishSubject alert

let alert = PublishSubject<RxAlert>()

然后,将其绑定在实现了RxAlertViewable协议的视图控制器类中。

viewModel.alert.bind(to: rx.alert).disposed(by: disposeBag)

RxAlertViewable支持以下基本警报类型。

  • tip(_ message:, onConfirm:, controllerType:)
  • warning(_ message:, onConfirm:, controllerType:)
  • error(_ message:, onConfirm:, controllerType:)
  • confirm(_ message:, onConfirm:, onDeny:, controllerType:)

要显示一个警报,只需向alert发送一个信号。

alert.onNext(.tip("Hello"))

或者直接使用封装方法

alert.onNextTip("Hello")

从版本0.8.4开始,推荐使用封装方法来处理RxAlert和RxActionSheet。

从版本1.1开始,支持了带多个操作的警报。

alert.onNextMultiple(
    title: "Multiple",
    message: "Multiple actions alert",
    .destructive(title: "destructive") {
        self.alert.onNextTip("destructive")
    },
    .default(title: "default") {
        self.alert.onNextTip("default")
    },
    .customCancel(title: "customCancel")
)

自定义默认标题、按钮名称和着色

使用以下代码自定义自己的字符串和着色。

RxAlertConfig.current = RxAlertConfig(
    tip: "My Tip",
    confirm: "My Confirm",
    warning: "My Warning",
    error: "My Error",
    yes: "My Yes",
    no: "My No",
    ok: "My OK",
    cancel: "My Cancel",
    tintColor: .blue
)

自定义警报控制器

RxAlertViewable支持自定义提示和确认警报的按钮名称和样式。

  • customTip(title:, message:, item:, onConfirm:)
  • customConfirm(title:, message:, item:, onConfirm:, onDeny:)
  • customConfirm(title:, message:, confirmTitle:, denyTitle:, onConfirm:, onDeny:)

要使用自定义警报,需要准备好实现RxAlertItem协议的数据类型和实现RxAlertController协议的视图控制器。

这里有一个自定义警报控制器的示例代码 https://github.com/lm2343635/RxAlertViewable/blob/master/Example/RxAlertViewable/CustomAlertController.swift

struct CustomAlertItem: RxAlertItem {
    static var controllerType: RxAlertController.Type = CustomAlertController.self
    
    var name: String
    var avatar: URL?
}

extension CustomAlertController: RxAlertController {

    static func create(title: String?, message: String?) -> Self {
        return self.init(title: title, message: message)
    }

    func setAction(for category: RxAlertCategory, item: RxAlertItem?) {
        switch category {
        case .single(let confirm):
            confirmButton.setTitle("OK", for: .normal)
            onConfirm = confirm
            denyButton.isHidden = true
        case .double(let confirm, let deny):
            confirmButton.setTitle("Yes", for: .normal)
            denyButton.setTitle("Cancel", for: .normal)
            denyButton.isHidden = false
            onConfirm = confirm
            onDeny = deny
        }

        guard let customAlertItem = item as? CustomAlertItem else {
            return
        }
        avatarImageView.kf.setImage(with: customAlertItem.avatar)
        nameLabel.text = customAlertItem.name
    }
    
}

要显示使用自定义警报控制器的警报,需要指定item

alert.onNextCustomConfirm(
    title: "Custom Controller",
    message: "Custom alert",
    item: CustomAlertItem(name: "Meng Li", avatar: URL(string: "https://avatars0.githubusercontent.com/u/9463655")),
    onConfirm: nil,
    onDeny: nil
)

全局警报

RxAlertViewable支持在新的 UIWindow 实例中显示全局警报视图,通过绑定来自任何类的 rx.globalAlert 信号。

viewModel.globalTip.bind(to: rx.globalAlert).disposed(by: disposeBag)

操作表

使用操作表几乎与使用警报相同。在你的视图模型类中准备一个 PublishSubject alert

let actionSheet = PublishSubject<RxActionSheet>()

然后,将其绑定在实现了RxAlertViewable协议的视图控制器类中。

viewModel.actionSheet.bind(to: rx.actionSheet).disposed(by: disposeBag)

要显示操作表,只需向 actionSheet 发送一个信号。**如果操作表将在 iPad 设备上显示,则必须指定参数 sourceView。否则,应用将在显示操作表前崩溃**。

actionSheet.onNextActions(
    sourceView: view,
    title: "Test title",
    message: "Test message",
    .default(title: "Default") {
        print("Default")
    },
    .destructive(title: "Destructive") {
        print("Destructive")
    },
    .cancel
)

作者

lm2343635, [email protected]

许可

RxAlertViewable采用MIT许可。有关更多信息,请参阅LICENSE文件。