这应该很简单,但它变得很头疼。我有一个UITextField视图,用户可以在其中键入一些文本并单击搜索。这会弹出另一个视图控制器,我会在第一个视图消失之前在文本字段上重新响应第一个响应者。当第二个视图被解除时,第一个视图会自动使文本字段再次成为第一个响应者,我找不到抑制此方法的方法。有没有人知道当我解雇第二个视图时如何防止键盘弹出?
我试图在viewWillAppear中resignFirstResponder,没有效果。我在viewDidAppear中尝试了相同的操作,但键盘弹出然后立即解散,这看起来很尴尬。
我感谢任何帮助。
答案 0 :(得分:6)
我找到了解决办法,但不是很好。
发现canBecomeResponder消息正在viewWillAppear
之后和viewDidAppear
之前传递到文本字段。
所以我将viewDidAppear
中的BOOL值设置为YES,并在textField:shouldBeginEditing
方法中使用该值。基本上,如果尚未调用viewDidAppear
,则textField:shouldBeginEditing
返回NO。
答案 1 :(得分:0)
我有一个类似的问题-View Controller A中的UITextView是第一个响应者。当点击屏幕上的另一个UI元素时,我将View Controller B推到了导航堆栈上,但是当按下后退按钮并再次显示View Controller A时,UITextView仍然是第一响应者。
我通过在视图控制器A的resignFirstResponder
中的文本视图上调用viewWillDisappear
解决了该问题。请注意,如果您在viewDidDisappear
中调用它,不会起作用,因为此时文本视图不再是第一响应者。确保您在调用resignFirstResponder
时,文本视图实际上是第一响应者,这一点很重要,否则,退出将不起作用。您可以通过在文本视图上检查isFirstResponder
来检查是否出于调试目的。