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的主要内容,如果未能解决你的问题,请参考以下文章