Как реализовать UIPickerView с RXSwift

точно так же, как UITableView

    items.bindTo(tableView.rx.items(cellIdentifier: "cellIdentifier", cellType: AttentionTableViewCell.self)){(row,dic,cell) in
        cell.configueCell(with: dic)
    }.addDisposableTo(dispose)

person BaQiWL    schedule 08.02.2017    source источник
comment
Не могли бы вы добавить то, что вы пробовали, и то, что вы хотите в результате?   -  person Sneha    schedule 08.02.2017
comment
oikehvl7k.bkt.clouddn.com/UIPickerView.png   -  person BaQiWL    schedule 08.02.2017
comment
Я предлагаю вам улучшить вопрос, указав более подробную информацию ... вместо того, чтобы делиться комментариями.   -  person Sneha    schedule 08.02.2017


Ответы (3)


Возможно, вам просто нужно обновить версию библиотеки RxSwift. Он выглядит почти так же, как UI {Table | Collection} View rx bindings. Предположим, у вас есть источник данных, например:

let items: Observable<[String]> = Observable.of(["Row1", "Row2", "Row3"])

Чтобы заполнить ваш UIPickerView:

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

Для обработки выбранных элементов:

yourPickerView.rx.itemSelected
    .subscribe { (event) in
        switch event {
        case .next(let selected):
            print("You selected #\(selected.row)")
        default:
            break
        }
    }
    .disposed(by: disposeBag)
person Lucas Fonseca    schedule 14.09.2017

Пример Swift4

Observable.just(["Yes", "No", "Maybe"])
                .bind(to: picker.rx.itemTitles) { _, item in
                    return "\(item)"
                }
                .disposed(by: disposeBag)



picker.rx.itemSelected
                .subscribe(onNext: { (row, value) in
                    NSLog("selected: \(row)")
                })
                .disposed(by: disposeBag)
person norbDEV    schedule 17.03.2019

Предоставленный источник данных вашего сборщика выглядит так:

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]
}).disposed(by: disposeBag)
person Valeriy Van    schedule 17.08.2017