RxSwift and UIPickerView





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







5















Is there a way to bind a UIPickerView with an Observable?



For example for a UITableView I would do:



myObservableArray.bindTo(tableView.rx.items(cellIdentifier: "Identifier", cellType: MyCustomTableViewCell.self)) { (row, title, cell) in
cell.textLabel?.text = title
}
.disposed(by: disposeBag)


Is there something similar for UIPickerView ?










share|improve this question























  • There is nothing usable out of the box from RxSwift's repository. One could look at the code used for UITableView bindings to come up with something similar for UIPickerView, but you'd need a pretty good experience with RxSwift to get a grasp of how that works (at least, I tried and failed)

    – tomahh
    Feb 19 '17 at 9:32






  • 1





    Please take a look at this answer: stackoverflow.com/a/46225009/1953178

    – Amro Shafie
    Feb 4 '18 at 8:26


















5















Is there a way to bind a UIPickerView with an Observable?



For example for a UITableView I would do:



myObservableArray.bindTo(tableView.rx.items(cellIdentifier: "Identifier", cellType: MyCustomTableViewCell.self)) { (row, title, cell) in
cell.textLabel?.text = title
}
.disposed(by: disposeBag)


Is there something similar for UIPickerView ?










share|improve this question























  • There is nothing usable out of the box from RxSwift's repository. One could look at the code used for UITableView bindings to come up with something similar for UIPickerView, but you'd need a pretty good experience with RxSwift to get a grasp of how that works (at least, I tried and failed)

    – tomahh
    Feb 19 '17 at 9:32






  • 1





    Please take a look at this answer: stackoverflow.com/a/46225009/1953178

    – Amro Shafie
    Feb 4 '18 at 8:26














5












5








5


2






Is there a way to bind a UIPickerView with an Observable?



For example for a UITableView I would do:



myObservableArray.bindTo(tableView.rx.items(cellIdentifier: "Identifier", cellType: MyCustomTableViewCell.self)) { (row, title, cell) in
cell.textLabel?.text = title
}
.disposed(by: disposeBag)


Is there something similar for UIPickerView ?










share|improve this question














Is there a way to bind a UIPickerView with an Observable?



For example for a UITableView I would do:



myObservableArray.bindTo(tableView.rx.items(cellIdentifier: "Identifier", cellType: MyCustomTableViewCell.self)) { (row, title, cell) in
cell.textLabel?.text = title
}
.disposed(by: disposeBag)


Is there something similar for UIPickerView ?







ios swift uipickerview rx-swift rx-cocoa






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Feb 17 '17 at 18:36









TheoKTheoK

2,17521630




2,17521630













  • There is nothing usable out of the box from RxSwift's repository. One could look at the code used for UITableView bindings to come up with something similar for UIPickerView, but you'd need a pretty good experience with RxSwift to get a grasp of how that works (at least, I tried and failed)

    – tomahh
    Feb 19 '17 at 9:32






  • 1





    Please take a look at this answer: stackoverflow.com/a/46225009/1953178

    – Amro Shafie
    Feb 4 '18 at 8:26



















  • There is nothing usable out of the box from RxSwift's repository. One could look at the code used for UITableView bindings to come up with something similar for UIPickerView, but you'd need a pretty good experience with RxSwift to get a grasp of how that works (at least, I tried and failed)

    – tomahh
    Feb 19 '17 at 9:32






  • 1





    Please take a look at this answer: stackoverflow.com/a/46225009/1953178

    – Amro Shafie
    Feb 4 '18 at 8:26

















There is nothing usable out of the box from RxSwift's repository. One could look at the code used for UITableView bindings to come up with something similar for UIPickerView, but you'd need a pretty good experience with RxSwift to get a grasp of how that works (at least, I tried and failed)

– tomahh
Feb 19 '17 at 9:32





There is nothing usable out of the box from RxSwift's repository. One could look at the code used for UITableView bindings to come up with something similar for UIPickerView, but you'd need a pretty good experience with RxSwift to get a grasp of how that works (at least, I tried and failed)

– tomahh
Feb 19 '17 at 9:32




1




1





Please take a look at this answer: stackoverflow.com/a/46225009/1953178

– Amro Shafie
Feb 4 '18 at 8:26





Please take a look at this answer: stackoverflow.com/a/46225009/1953178

– Amro Shafie
Feb 4 '18 at 8:26












2 Answers
2






active

oldest

votes


















1














As a matter of fact there is, in the RxCocoa library:



Example:



let items = Observable.just([
"First Item",
"Second Item",
"Third Item"
])

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


There's also:



items
.bind(to: pickerView.rx.items) { (row, element, view) in
guard let myView = view as? MyView else {
let view = MyView()
view.configure(with: element)
return view
}
myView.configure(with: element)
return myView
}
.disposed(by: disposeBag)





share|improve this answer































    0














    Provided data source of your picker looks like this:



    let pickerDataSource: [[String]] = [ ["asdadadad", "sffgddfg"],
    ["sfsdasgag", "sdfasdfasfsf", "sdsfgagagaggs"] ]


    you could implement 'binding' you need in this way:



    pickerView.rx.itemSelected.subscribe(onNext: { [weak self] row, component in
    guard let s = self else { return }
    s.label.text = s.pickerDataSource[component][row]
    }).addDisposableTo(disposeBag)





    share|improve this answer
























      Your Answer






      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "1"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f42305155%2frxswift-and-uipickerview%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      1














      As a matter of fact there is, in the RxCocoa library:



      Example:



      let items = Observable.just([
      "First Item",
      "Second Item",
      "Third Item"
      ])

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


      There's also:



      items
      .bind(to: pickerView.rx.items) { (row, element, view) in
      guard let myView = view as? MyView else {
      let view = MyView()
      view.configure(with: element)
      return view
      }
      myView.configure(with: element)
      return myView
      }
      .disposed(by: disposeBag)





      share|improve this answer




























        1














        As a matter of fact there is, in the RxCocoa library:



        Example:



        let items = Observable.just([
        "First Item",
        "Second Item",
        "Third Item"
        ])

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


        There's also:



        items
        .bind(to: pickerView.rx.items) { (row, element, view) in
        guard let myView = view as? MyView else {
        let view = MyView()
        view.configure(with: element)
        return view
        }
        myView.configure(with: element)
        return myView
        }
        .disposed(by: disposeBag)





        share|improve this answer


























          1












          1








          1







          As a matter of fact there is, in the RxCocoa library:



          Example:



          let items = Observable.just([
          "First Item",
          "Second Item",
          "Third Item"
          ])

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


          There's also:



          items
          .bind(to: pickerView.rx.items) { (row, element, view) in
          guard let myView = view as? MyView else {
          let view = MyView()
          view.configure(with: element)
          return view
          }
          myView.configure(with: element)
          return myView
          }
          .disposed(by: disposeBag)





          share|improve this answer













          As a matter of fact there is, in the RxCocoa library:



          Example:



          let items = Observable.just([
          "First Item",
          "Second Item",
          "Third Item"
          ])

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


          There's also:



          items
          .bind(to: pickerView.rx.items) { (row, element, view) in
          guard let myView = view as? MyView else {
          let view = MyView()
          view.configure(with: element)
          return view
          }
          myView.configure(with: element)
          return myView
          }
          .disposed(by: disposeBag)






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 22 '18 at 23:37









          Daniel T.Daniel T.

          14.6k22735




          14.6k22735

























              0














              Provided data source of your picker looks like this:



              let pickerDataSource: [[String]] = [ ["asdadadad", "sffgddfg"],
              ["sfsdasgag", "sdfasdfasfsf", "sdsfgagagaggs"] ]


              you could implement 'binding' you need in this way:



              pickerView.rx.itemSelected.subscribe(onNext: { [weak self] row, component in
              guard let s = self else { return }
              s.label.text = s.pickerDataSource[component][row]
              }).addDisposableTo(disposeBag)





              share|improve this answer




























                0














                Provided data source of your picker looks like this:



                let pickerDataSource: [[String]] = [ ["asdadadad", "sffgddfg"],
                ["sfsdasgag", "sdfasdfasfsf", "sdsfgagagaggs"] ]


                you could implement 'binding' you need in this way:



                pickerView.rx.itemSelected.subscribe(onNext: { [weak self] row, component in
                guard let s = self else { return }
                s.label.text = s.pickerDataSource[component][row]
                }).addDisposableTo(disposeBag)





                share|improve this answer


























                  0












                  0








                  0







                  Provided data source of your picker looks like this:



                  let pickerDataSource: [[String]] = [ ["asdadadad", "sffgddfg"],
                  ["sfsdasgag", "sdfasdfasfsf", "sdsfgagagaggs"] ]


                  you could implement 'binding' you need in this way:



                  pickerView.rx.itemSelected.subscribe(onNext: { [weak self] row, component in
                  guard let s = self else { return }
                  s.label.text = s.pickerDataSource[component][row]
                  }).addDisposableTo(disposeBag)





                  share|improve this answer













                  Provided data source of your picker looks like this:



                  let pickerDataSource: [[String]] = [ ["asdadadad", "sffgddfg"],
                  ["sfsdasgag", "sdfasdfasfsf", "sdsfgagagaggs"] ]


                  you could implement 'binding' you need in this way:



                  pickerView.rx.itemSelected.subscribe(onNext: { [weak self] row, component in
                  guard let s = self else { return }
                  s.label.text = s.pickerDataSource[component][row]
                  }).addDisposableTo(disposeBag)






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Aug 17 '17 at 15:45









                  Valeriy VanValeriy Van

                  1,7201319




                  1,7201319






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f42305155%2frxswift-and-uipickerview%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      How to change which sound is reproduced for terminal bell?

                      Can I use Tabulator js library in my java Spring + Thymeleaf project?

                      Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents