質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
RxSwift

RxSwiftは、Reactive ExtensionsのSwift向けの実装です。iOS開発に用いられ、リアクティブプログラミングを可能にします。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

933閲覧

RxSwiftを用いたUILabelとUIPickerViewのバインド時の初期値の設定方法について

pftyuk

総合スコア52

RxSwift

RxSwiftは、Reactive ExtensionsのSwift向けの実装です。iOS開発に用いられ、リアクティブプログラミングを可能にします。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/08/04 14:43

前提・実現したいこと

Rx初学者です。

こちらを参考に、UIPickerViewで選択した値をUILabelで表示する処理を実装したのですが
UIPickerViewに初期値を設定した際に、UILabelに反映させる方法がわからず質問させて頂きました。

下記のコードで、ピッカーが選択された時に、選択された項目がUILabelに
反映されるのは理解できたのですが、UIPickerViewに初期値を設定した際は
どうすればUILabelの方にも値が反映されるのでしょうか。ご教示頂きたいです。

発生している問題・エラーメッセージ

UIPickerViewに初期値を設定した際に、UILabelに反映されない。

該当のソースコード

Swift

1import UIKit 2import RxSwift 3 4class TestViewController: UIViewController { 5 6 @IBOutlet weak var ladel: UILabel! 7 @IBOutlet weak var pickerView: UIPickerView! 8 9 private let disposeBag = DisposeBag() 10 11 var items = [String]() 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 16 for n in 0...10 { 17 self.items.append("item (n)") 18 } 19 20 Observable.just(self.items) 21 .bind(to: self.pickerView.rx.itemTitles) { _, items in 22 return items 23 } 24 .disposed(by: self.disposeBag) 25 26 self.pickerView.rx.modelSelected(String.self) 27 .map { item in 28 item.first 29 } 30 .bind(to: self.ladel.rx.text) 31 .disposed(by: self.disposeBag) 32 33 self.pickerView.selectRow(2, inComponent: 0, animated: true) 34 } 35}

試したこと

pickerView.selectRowで初期値を設定してみたが
選択して値を変えたわけではないので、UILabelには反映されなかった。

以下起動直後の画面
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

公式リポジトリのコードによると、delegateのメソッドを自分で呼ぶ必要があるみたいです。
https://github.com/ReactiveX/RxSwift/blob/master/Tests/RxCocoaTests/UIPickerView%2BRxTests.swift#L169-L170

swift

1self.pickerView.selectRow(2, inComponent: 0, animated: true) 2self.pickerView.delegate?.pickerView!(self.pickerView, didSelectRow: 2, inComponent: 0)

投稿2019/08/05 06:23

kakajika

総合スコア3131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pftyuk

2019/08/11 04:25

ご回答頂きありがとうございます。 返信が遅くなってしまい大変恐縮です。 ご提示頂いた方法で、UILabelの方にも初期値を反映することが出来ました! この度はありがとうございました。ベストアンサーとさせて頂きクローズします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問