RxAlertViewable 是为使用 RxSwift 开发 MVVM 应用而创建的。它支持从带有信号 Observable<RxAlert>
的视图模型类显示简单的警报。
安装
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文件。