当视图变得可见时,UITextField成为第一响应者,但我不希望它

时间:2013-06-21 22:51:31

标签: iphone ios uitextfield

这应该很简单,但它变得很头疼。我有一个UITextField视图,用户可以在其中键入一些文本并单击搜索。这会弹出另一个视图控制器,我会在第一个视图消失之前在文本字段上重新响应第一个响应者。当第二个视图被解除时,第一个视图会自动使文本字段再次成为第一个响应者,我找不到抑制此方法的方法。有没有人知道当我解雇第二个视图时如何防止键盘弹出?

我试图在viewWillAppear中resignFirstResponder,没有效果。我在viewDidAppear中尝试了相同的操作,但键盘弹出然后立即解散,这看起来很尴尬。

我感谢任何帮助。

2 个答案:

答案 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来检查是否出于调试目的。