RxSwift: установить начальное значение для UIPickerView - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь установить начальное значение для 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 голосов
/ 03 августа 2018

На самом деле, использование собственного метода UIPickerView - это нормально;

mPicker.selectRow (defaultRowIndex, inComponent: 0, animated: false)

0 голосов
/ 07 сентября 2018

Основываясь на ответе @ 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)
0 голосов
/ 23 мая 2018

Я бы предложил создать переменную в viewmodel типа: Переменная.В вашем viewcontroller сделайте эту переменную наблюдаемой и привязайте к представлению выбора.Если вы измените значение переменной, оно автоматически отобразится в окне выбора.

Пример кода может быть следующим:

//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)

Пожалуйста, игнорируйте несколько синтаксисов, если таковые имеются.Дайте мне знать для любой дальнейшей помощи.

...