iPhone-在 UITextField 上辞职第一响应者后,无法重新聚焦

Posted

技术标签:

【中文标题】iPhone-在 UITextField 上辞职第一响应者后,无法重新聚焦【英文标题】:iPhone- After resigning first responder on UITextField, can't refocus it 【发布时间】:2011-07-23 20:49:32 【问题描述】:

我有一个模式窗口,用于从远程服务器搜索数据——它有一个 UITextField 作为窗口导航栏的 titleControl,以及一个填充窗口的表格视图(显然显示结果)。现在我想要做的是当用户滚动表格视图时,立即让文本字段失去焦点(辞职第一响应者),以便键盘关闭并且用户有更多空间滚动表格视图(它向下延伸以填补空白通过键盘)。与使用 UISearchDisplayController(或其他任何名称)时的功能基本相同。

所以我有这段代码来检测tableview的滚动事件:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
    [searchField resignFirstResponder];

效果很好。但是,问题在于,一旦用户滚动表格并且文本字段失去焦点,您就无法通过再次点击它来将焦点归还给它。所以基本上,一旦我调用[resignFirstResponser],我就再也无法恢复键盘并编辑文本字段值了。有人知道为什么吗?我是否需要在某个地方明确地调用[becomeFirstResponder]?因为我认为点击该字段时会自动处理?

另外值得注意的是,当第一次调用模态窗口时,我在文本字段上调用[becomeFirstResponder],因此该字段是预先聚焦的。会不会有什么关系?

如果有人愿意,我可以发布更多代码,但我不认为我在使用文本字段做任何不寻常的事情。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

您正在从每次滚动UIScrollview 时调用的函数调用resignFirstResponder。因此它不会出现。当 uitextview 失焦时,您需要调用 resign 。

您可以执行以下操作。这是一个黑客:

    每当您关注 UITextField 时,都会创建一个不可见的按钮来覆盖您的滚动视图。 捕获按钮按下事件并让第一响应者辞职 只要 uitextfield 成为第一响应者,就创建按钮

通过这种方式,您将删除错误,即调用scrollViewWillBeginDragging 中的方法。 其他选项是覆盖uiTextFieldviewDidAppear 方法。

或者您可以将您的文本字段放入不同的容器中,并通过检查哪个滚动视图发送消息来处理 scrollViewWillBeginDragging。

【讨论】:

试过了,也没用。同样的问题,一旦我在文本字段上调用[resignFirstResponder],它就不再能够在点击时获得焦点。其实我把resignResponder调用拿出来,直接放在窗口的viewDidAppear方法里,问题还是出现了。所以基本上只要我在文本字段上调用 ​​resign 方法,无论在代码中的哪个位置,它都不再能够与之交互。很烦人... 不,您需要在只调用一次的地方调用它。不要调用当前视图的 viewdidappear 方法。它不会工作。您是否创建了一个不可见的按钮并尝试了这种方法。基本上它没有得到关注,因为每次都会调用 resignfirstresponder 。您可以通过在代码中添加 if 条件来检查。 @Praveen: 抓到press event后不需要销毁按钮吗?【参考方案2】:

您是否为您的 searchField 设置了委托?我遇到过同样的问题。我弹出一个模型视图,并将文本字段设置为 viewDidLoad 中的第一响应者。一切都是第一次运行良好。但是一旦我关闭模态视图控制器,然后重新打开它。我的文本字段无法再聚焦了。

我发现它与 UITextFieldDelegate 的方法有关。一旦我删除了方法的实现

– textFieldShouldEndEditing:
– textFieldDidEndEditing:

一切正常。但不知道为什么

【讨论】:

【参考方案3】:

您是否正在使用“textFieldShouldEndEditing”做任何事情,例如@fengd?

我遇到的一个问题是我正在查看模式视图,而我的“textFieldShouldEndEditing”例程在特定文本字段上错误地返回“NO”。当我的模式被解雇时,我将无法点击任何其他文本字段,大概是因为旧文本字段仍然是“第一响应者”。由于它永远无法结束编辑,它会弄乱它之后的所有其他文本字段。

我意识到这是 2 年后的事,但也许其他人会觉得这很有用。

【讨论】:

以上是关于iPhone-在 UITextField 上辞职第一响应者后,无法重新聚焦的主要内容,如果未能解决你的问题,请参考以下文章

UITextField 辞职第一响应者 iOS4

UITextField 不辞职第一响应者?

使用 UIToolbar/UITextField 辞职第一响应者问题

UITextField,辞职第一响应者时,导致文本的奇怪动画滚动

UITextField 辞职 firstResponder 太早了

辞职第一响应者 UITextfield