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
中的方法。
其他选项是覆盖uiTextField
的viewDidAppear
方法。
或者您可以将您的文本字段放入不同的容器中,并通过检查哪个滚动视图发送消息来处理 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 上辞职第一响应者后,无法重新聚焦的主要内容,如果未能解决你的问题,请参考以下文章
使用 UIToolbar/UITextField 辞职第一响应者问题
UITextField,辞职第一响应者时,导致文本的奇怪动画滚动