RxPanModal 0.2

RxPanModal 0.2

[Meng Li] 维护。



  • 作者
  • lm2343635

RxPanModal

Build Status Version License Platform

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文件。