【问题标题】:How to realize UIPickerView with RXSwift如何用 RXSwift 实现 UIPickerView
【发布时间】:2017-06-25 19:27:29
【问题描述】:

就像 UITableView

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

【问题讨论】:

标签: ios swift uipickerview rx-swift


【解决方案1】:

也许你只需要更新你的 RxSwift 库版本。它看起来与 UI{Table|Collection}View rx 绑定几乎相同。 假设您有如下数据源:

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)

【讨论】:

    【解决方案2】:

    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)
    

    【讨论】:

      【解决方案3】:

      提供的选择器数据源如下所示:

      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)
      

      【讨论】:

        【解决方案4】:
        @IBOutlet weak var pickerView: UIPickerView!
        let disposeBag = DisposeBag()
        

        将一个从 1 到 12 的数组绑定到pickerview。

        Observable.of(Array(1...12)).bind(to: pickerView.rx.itemTitles) { (row, element) in
            return String(element)
        }.disposed(by: disposeBag)
        

        将选定的值绑定到 anyLabel。你可以相应地绑定它。

        pickerView.rx.itemSelected.asObservable().map { value in String(value.row + 1) }.bind(to: anyLabel.rx.text).disposed(by: disposeBag)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-08
          • 1970-01-01
          • 2017-05-28
          • 1970-01-01
          • 2021-07-11
          • 1970-01-01
          相关资源
          最近更新 更多