使用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
是在按下“完成”按钮时触发的。
有没有更好的方法来做到这一点?
我会使用'editingDidEnd'而不是'primaryActionTriggered'。 –
@ SebastianHojas:我最初尝试使用.editingDidEnd,但似乎并不奏效(两者都在模拟器和设备上)。通过观察那个事件,我可以看到它在键盘被解散之后触发(奇怪?)。 – Nick