1

这里是 ReactiveCocoa 和 ReactiveSwfit 的新手......如果答案很明显,对不起。

我正在尝试将 Starting 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' UITextFields 的委托并且我仍然实现教程中描述的和上面提到的方法。本质上 :

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 回答