15

我有两个文本字段电子邮件和密码。当字段显示在常规视图上时,以下代码工作正常,但当它们位于弹出窗口时,resignFirstResponder 不起作用(becomeFirstResponder 工作)。两个字段都调用了 textFieldsShouldReturn。知道我是否遗漏了什么吗?谢谢!

  - (BOOL)textFieldShouldReturn:(UITextField *)theTextField {

     if (theTextField == email) {
         [password becomeFirstResponder];
         return NO;
     }

     [theTextField resignFirstResponder];
     return NO;
}
4

5 回答 5

17

检查这个问题:

覆盖disablesAutomaticKeyboardDismissal返回NO如下解决了我的相同问题。你应该把这段代码放到你的视图控制器中,你可以从中启动键盘:

- (BOOL)disablesAutomaticKeyboardDismissal {
    return NO;
}
于 2011-11-29T20:40:13.950 回答
2

本答案中所述,当视图以 UIModalPresentationFormSheet 样式呈现时,键盘有时会保留在屏幕上。

于 2011-02-17T03:08:13.093 回答
1

我对此不太确定,但是,据我了解响应者层次结构,只有当您有其他响应者要回答时,辞职才会起作用。

在常规视图中,视图本身是愿意的。在弹出窗口中,您可能需要对弹出窗口类做一些事情(例如重新实现一些 Responder 方法)才能使其正常工作。

于 2010-09-13T13:56:03.993 回答
1

我也遇到了这个问题。但我通过制作另一个控件解决了这个问题,该控件不在弹出窗口中firstResponder,后来从那里辞职。但我不知道popover有什么问题。

于 2010-09-21T13:54:35.077 回答
0

答案是为其他有类似问题的人提供可能的解决方案,但传统的补救措施不起作用。

总之 -

我有一个类似的问题(在某种条件下)并尝试了一切 - 无济于事 - 我的可能解决方案列表中包含 [obj's resignFirstResponder],我的视图控制器的“disablesAutomaticKeyboardDismissal”覆盖,[self.view endEditing:YES ]; 和一堆其他的东西。

开始确定当前第一响应者的 [id],结果发现它是 nil。点击键盘上的“完成”或使用上述任何方法都没有任何效果 - 键盘仍然存在 - 即使在点击另一个输入字段后也是如此。

屏幕本质上是一个带有 UITableView 的 ViewController,每个单元格中都有一个文本输入字段 - 总共 7 或 8 个。点击任何单元格都会按预期调出键盘,然后点击单独的“下一步”按钮(隐藏键盘和其他处理)按预期工作。但是,在横向模式下,最后一个字段被键盘覆盖,需要滚动表格才能显示。

滚动并点击最后一个输入字段后,无论如何都无法关闭键盘。唯一的解决方法是将表格向后滚动到键盘下方,然后点击“下一步”按钮。这没有意义。

几乎在放弃(并实施解决方法)的时候,有效的解决方案是使最后一个输入字段成为 firstResponder (即使它已经有一个闪烁的光标),然后在此之后 resignFirstResponder 。

所以;

`-(void) actionNext {

[[m_arrInputFields objectAtIndex:7] becomeFirstResponder];
[[m_arrInputFields objectAtIndex:7] resignFirstResponder];

}`

修复了问题- 而 [m_arrInputFields objectAtIndex:#any other index#]没有!

如果有人能对此提供清晰或解释,那就太好了 - 否则 - 我希望它可以为其他人节省几个小时的工作!

于 2014-05-22T11:24:35.643 回答