RxPanModal
RxPanModal 是针对 PanModal 库的 RxSwift 响应式扩展。使用 RxPanModal,视图控制器可以直接从视图模型以滑动模态的形式呈现。
文档
RxPanModal 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod 'RxPanModal'
以滑动模态呈现自定义视图控制器
要从视图模型直接以滑动模态呈现视图控制器,应实现协议 RxPanModalPresentable
。
extension SelectorViewController: RxPanModalPresentable {
static func create(item: RxPanModalItem) -> Self? {
guard let item = item as? SelectorPanModalItem else {
return nil
}
return self.init(item: item)
}
var panScrollable: UIScrollView? {
return tableView
}
}
在静态方法 create
中有一个实现了协议 RxPanModalItem
的结构体 SelectorPanModalItem
。
struct SelectorPanModalItem: RxPanModalItem {
static let controllerType: RxPanModalPresentable.Type = SelectorViewController.self
let names: [String]
let didNameSelected: (String) -> Void
}
在项目结构中,应指定控制器类型。在项目结构中还应定义其他属性和闭包,用于与视图模型交换数据。
在实现自定义视图模型后,应在视图模型中准备一个 PublishSubject
属性 panModal
。
class ViewModel {
private let panModalSubject = PublishSubject<RxPanModal>()
var panModal: Observable<RxPanModal> {
return panModalSubject.asObservable()
}
}
相应的视图控制器应实现协议 RxPanModalShowable
并绑定可观察的 panModel
。
class ViewController: UIViewController, RxPanModalShowable {
override func viewDidLoad() {
super.viewDidLoad()
viewModel.name.bind(to: nameLabel.rx.text).disposed(by: disposeBag)
}
}
最后,可以直接从视图模型呈现自定义视图控制器。
panModalSubject.onNext(item: SelectorPanModalItem(names: ["Alice", "Bob", "Carol"]) {
print($0)
})
准备模板
要使用准备模板视图控制器,只需通过subspect RxPanModal/Template
安装。
pod 'RxPanModal/Template'
以下是在准备中的模板。
- RxPanModalPickerViewController
panModalSubject.onNextPicker(
theme: .dark,
title: "Months",
done: "Done",
models: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Nov", "Dec"],
didSelectItemAt: { index, model in
print("select at \(index) " + model.description)
},
doneAt: { index, model in
print("done at \(index) " + model.description)
}
)
取消显示所有展示的滑动模态。
有时,如果您想取消显示所有展示的滑动模态,只需在任意位置调用RxPanModal.dismissAll()
即可。
示例
要运行示例项目,请首先克隆存储库,然后从Example目录运行pod install
。
许可证
RxPanModal在MIT许可证下可用。更多内容请参阅LICENSE文件。