RxSwift:为 UIPickerView 设置初始值
RxSwift: Set initial value for UIPickerView
我正在尝试设置 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 进行双向绑定或只设置初始值。
欢迎提出任何想法!
我建议在视图模型中创建一个类型为变量的变量。在您的 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)
请忽略一些语法(如果有的话)。如需进一步帮助,请告诉我。
其实用UIPickerView自带的方法就可以了;
mPicker.selectRow(defaultRowIndex, inComponent: 0, animated: false)
根据@halley-wang 的回答,我在 RxSwift 仓库中找到了解决方案:https://github.com/ReactiveX/RxSwift/blob/master/Tests/RxCocoaTests/UIPickerView%2BRxTests.swift#L169-L170
所以,这是我的代码:
let row = 42 // Default row
pickerView.selectRow(row, inComponent: 0, animated: false)
pickerView.delegate?.pickerView!(pickerView,
didSelectRow: row,
inComponent: 0)
我正在尝试设置 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 进行双向绑定或只设置初始值。
欢迎提出任何想法!
我建议在视图模型中创建一个类型为变量的变量。在您的 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)
请忽略一些语法(如果有的话)。如需进一步帮助,请告诉我。
其实用UIPickerView自带的方法就可以了;
mPicker.selectRow(defaultRowIndex, inComponent: 0, animated: false)
根据@halley-wang 的回答,我在 RxSwift 仓库中找到了解决方案:https://github.com/ReactiveX/RxSwift/blob/master/Tests/RxCocoaTests/UIPickerView%2BRxTests.swift#L169-L170
所以,这是我的代码:
let row = 42 // Default row
pickerView.selectRow(row, inComponent: 0, animated: false)
pickerView.delegate?.pickerView!(pickerView,
didSelectRow: row,
inComponent: 0)