iPad popover textfield - resignFirstResponder不会关闭键盘

时间:2010-04-16 16:09:48

标签: iphone ipad uipopovercontroller

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

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

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

     [theTextField resignFirstResponder];
     return NO;
}

5 个答案:

答案 0 :(得分:17)

检查this问题:

覆盖disablesAutomaticKeyboardDismissal以返回NO,如下所示修复了我的同样问题。您应该将此代码放入视图控制器,从中启动键盘:

- (BOOL)disablesAutomaticKeyboardDismissal {
    return NO;
}

答案 1 :(得分:2)

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

答案 2 :(得分:1)

我对此不太了解,但是,据我了解响应者层次结构,只有当你有其他响应者回答时,辞职才有效。

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

答案 3 :(得分:1)

我也遇到了这个问题。但是我通过制作另一个控件来解决这个问题,这个控件不在弹出框中firstResponder,后来从那里重新签名。但我不知道popover有什么问题。

答案 4 :(得分:0)

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

总结 -

我有类似的问题(在某种情况下)并尝试了一切 - 无济于事 - 我的可能解决方案列表中包含[obj的resignFirstResponder],覆盖了'disablesAutomaticKeyboardDismissal' view controller,[self.view endEditing:YES];还有很多其他的事情。

关于确定当前第一响应者的[id],发现它只是零。点击键盘上的'完成'或使用上述任何方法都没有做任何事情 - 键盘仍然存在 - 即使在点击另一个输入字段后也是如此。

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

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

几乎在放弃(并实施变通方法)时,有效的解决方案是将最后一个输入字段设置为firstResponder(即使它已经有一个闪烁的光标),然后再调用resignFirstResponder。

<强>因此;

` - (void)actionNext {

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

}`

修复了问题 - 而[m_arrInputFields objectAtIndex:#any其他索引#] 没有!

如果有人能为此提供清晰度或解释,那将会很棒 - 否则 - 我希望它可以为其他人节省几个小时的工作量!