使用RAC(5)解除UITextField中的键盘?

时间:2017-05-25 00:33:03

标签: uitextfield reactive-cocoa reactive-cocoa-4

这里有ReactiveCocoa和ReactiveSwfit的新手......如果答案很明显,很抱歉。

我正在尝试将Start Developing iOS Apps with Swift示例调整为ReactiveSwift / ReactiveCocoa,而我遇到的问题是"翻译" UITextField的委托方法 - 摆脱键盘并基本上结束编辑(因此我可以捕获mealNameLabel中的文本字段):

  • func textFieldShouldReturn(_ textField:UITextField) - >布尔

我正在使用

    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(任何地方的文档?)缺乏了解而失败了。

那么当用户完成编辑时,我需要做些什么来使键盘消失,&#34;反应方式&#34; ?

谢谢!!!

1 个答案:

答案 0 :(得分:1)

(当然我发布问题后......)

看起来这实际上可能就是这个伎俩:

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

在摆弄不同的事件类型之后,看起来.primaryActionTriggered是&#34; Done&#34;按下按钮。

有更好的方法吗?