1

ここでReactiveCocoaとReactiveSwfitの初心者...答えが明らかな場合は申し訳ありません。

Start Developing iOS Apps with Swiftサンプルを ReactiveSwift / ReactiveCocoaに適合させようとしていますが、UITextFieldの Delegate メソッドを「翻訳」する際に問題が発生しています。 mealNameLabel)のテキスト フィールドをキャプチャできます。

  • func textFieldShouldReturn(_ textField: UITextField) -> Bool

私は使っている

    nameTextField.reactive.textValues.observeValues { value in
        viewModel.mealName.swap(value ?? "")
    }

    // Setup bindings to update the view's meal label
    // based on data from the View Model
    mealNameLabel.reactive.text <~ viewModel.mealLabel

テキストフィールドからビューモデルに値を取得し、ビューモデルのラベルをUILabelにパーコレートします(複雑な...)

viewControllerのデリゲートとしてを維持UITextFieldし、チュートリアルに示されている上記のメソッドをまだ実装している限り、それはうまく機能します。本質的に:

override func viewDidLoad() {
    super.viewDidLoad()

    nameTextField.delegate = self
    // view controller logic
    ...
}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    // Hide the keyboard.
    textField.resignFirstResponder()
    return true
}

使ってみた

nameTextField.reactive.controlEvents

controlEventsしかし、 (ドキュメントはどこにありますか?)の理解が不足しているため、それは惨めに失敗しました。

では、ユーザーが編集を完了したときにキーボードを非表示にするには、「リアクティブな方法」で何をする必要がありますか?

ありがとう !!!

4

1 に答える 1

1

(もちろん、質問を投稿した直後...)

これは実際にうまくいくようです:

    nameTextField.reactive.controlEvents(UIControlEvents.primaryActionTriggered)
        .observeValues { textField in
        textField.resignFirstResponder()
    }

.primaryActionTriggeredさまざまなイベントタイプをいじった後、「完了」ボタンが押されたときにトリガーされるように見えます。

これを行うためのより良い方法はありますか?

于 2017-05-25T00:55:50.170 に答える