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

问题描述:

新手来ReactiveCocoa和ReactiveSwfit在这里...很抱歉,如果答案是明显的。使用RAC(5)解除UITextField中的键盘?

我正在尝试将Start Developing iOS Apps with Swift示例改编为ReactiveSwift/ReactiveCocoa,并且我遇到了“翻译”UITextField的Delegate方法的问题 - 该方法摆脱了键盘并基本结束了编辑(所以我可以捕捉到mealNameLabel文本字段):

  • FUNC textFieldShouldReturn(_文本框:的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失败(文档的任何地方?)。

那么当用户完成编辑时,我需要做些什么来使键盘消失,即“被动方式”?

谢谢!

(当然之后我张贴我的问题...)

看起来这实际上可能做的伎俩:

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

与不同的事件类型摆弄之后,它看起来像.primaryActionTriggered是在按下“完成”按钮时触发的。

有没有更好的方法来做到这一点?

+0

我会使用'editingDidEnd'而不是'primaryActionTriggered'。 –

+0

@ SebastianHojas:我最初尝试使用.editingDidEnd,但似乎并不奏效(两者都在模拟器和设备上)。通过观察那个事件,我可以看到它在键盘被解散之后触发(奇怪?)。 – Nick