RxSwift 和 UIPickerView

Posted

技术标签:

【中文标题】RxSwift 和 UIPickerView【英文标题】:RxSwift and UIPickerView 【发布时间】:2017-02-17 18:36:07 【问题描述】:

有没有办法将UIPickerView 与 Observable 绑定?

例如,对于UITableView,我会这样做:

myObservableArray.bindTo(tableView.rx.items(cellIdentifier: "Identifier", cellType: MyCustomTableViewCell.self))  (row, title, cell) in
        cell.textLabel?.text = title
    
    .disposed(by: disposeBag)

UIPickerView 有类似的东西吗?

【问题讨论】:

RxSwift 的存储库中没有开箱即用的东西。可以查看用于UITableView 绑定的代码,以得出与UIPickerView 类似的代码,但您需要非常好的 RxSwift 经验才能掌握它是如何工作的(至少, 尝试过但失败了) 请看这个答案:***.com/a/46225009/1953178 【参考方案1】:

事实上,在 RxCocoa 库中:

例子:

let items = Observable.just([
        "First Item",
        "Second Item",
        "Third Item"
    ])

items
    .bind(to: pickerView.rx.itemTitles)  (row, element) in
        return element
    
    .disposed(by: disposeBag)

还有:

items
   .bind(to: pickerView.rx.items)  (row, element, view) in
       guard let myView = view as? MyView else 
           let view = MyView()
           view.configure(with: element)
           return view
       
       myView.configure(with: element)
       return myView
   
   .disposed(by: disposeBag)

【讨论】:

如何在RxSwift 中为UIDatePicker 执行此操作?有教程吗? 日期选择器类已经有一个响应式扩展。看rx.date github.com/ReactiveX/RxSwift/blob/master/RxCocoa/ios/… ,我已阅读此链接。我不知道如何从UIDatePicker 中选择日期。你能指导我吗? 我已经向你发送了关于这个疑问的邮件。 datePicker.rx.date .subscribe (datee) in print("chosen date ", datee) .disposed(by: disposeBag) 。这是从UIDatePickerView 选择日期的正确方法吗? 那不合适。如果您对某事有疑问。在此站点或 RxSwift 松弛频道中询问它。有人会回答它(甚至可能是我。)【参考方案2】:

提供的选择器数据源如下所示:

let pickerDataSource: [[String]] = [ ["asdadadad", "sffgddfg"],
                                     ["sfsdasgag", "sdfasdfasfsf", "sdsfgagagaggs"] ]

您可以通过这种方式实现您需要的“绑定”:

pickerView.rx.itemSelected.subscribe(onNext:  [weak self] row, component in
    guard let s = self else  return 
    s.label.text = s.pickerDataSource[component][row]
).addDisposableTo(disposeBag)

【讨论】:

使用itemSelected 可以获取项目,但是如何将二维数组绑定到pickerView?

以上是关于RxSwift 和 UIPickerView的主要内容,如果未能解决你的问题,请参考以下文章

传递数据 MVVM 和 RxSwift

RxSwift安装

RxSwift安装

RxSwift 中的 PublishSubject 和 PublishRelay 有啥区别?

结合 Alamofire 和 RxSwift

RxSwift:在使用 flatMap 和 reduce 时需要帮助