RxSwift:设置UIPickerView的初始值

时间:2018-05-22 05:42:02

标签: swift rx-swift

我正在尝试为UIPickerView设置初始值。

这是我的代码示例:

@IBOutlet weak var pickerView: UIPickerView!

override func viewDidLoad() {
    super.viewDidLoad()

    Observable.just([1, 2, 3])
        .bind(to: pickerView.rx.itemTitles) { _, item in
            return "\(item)"
        }
        .disposed(by: disposeBag)

    pickerView.rx.modelSelected(Int.self)
        .subscribe(onNext: { models in
            print("models selected 1: \(models)")
        })
        .disposed(by: disposeBag)
}

我不知道如何使用我的ViewModel进行双向绑定或只设置初始值。

欢迎任何想法!

3 个答案:

答案 0 :(得分:0)

我建议在viewmodel中创建一个变量:Variable。在viewcontroller中,使该变量可观察并绑定到pickerview。如果更改变量的值,它将自动反映在pickerview中。

示例代码段可以是:

//viewmodel file: --------------
var dataSourceArray: Variable<[String]> = Variable([])
//somewhere after receiving data: add to data source
dataSourceArray.value.append(YOUR_NEW_DATA)

////// viewcontroller file----------------
self.viewModel.dataSourceArray.asObservable().bind(to: pickerView.rx.itemTitles) { _, item in
        return "\(item)"
    }
    .disposed(by: disposeBag)

如果有的话,请忽略一些语法。让我知道任何进一步的帮助。

答案 1 :(得分:0)

实际上,使用UIPickerView自己的方法很好;

  

mPicker.selectRow(defaultRowIndex,inComponent:0,动画:false)

答案 2 :(得分:0)

基于@ halley-wang的回答,我在RxSwift存储库中找到了一个解决方案:https://github.com/ReactiveX/RxSwift/blob/master/Tests/RxCocoaTests/UIPickerView%2BRxTests.swift#L169-L170

所以,这是我的代码:

supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />