我有两个文本字段的电子邮件和密码。当在常规视图上显示字段时,以下代码可以正常工作,但是当它们在弹出窗口上时,resignFirstResponder不起作用(becomeFirstResponder工作)。两个字段都调用了textFieldsShouldReturn。 如果我遗失了什么,不知道吗? 谢谢!
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
if (theTextField == email) {
[password becomeFirstResponder];
return NO;
}
[theTextField resignFirstResponder];
return NO;
}
答案 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其他索引#] 没有!
如果有人能为此提供清晰度或解释,那将会很棒 - 否则 - 我希望它可以为其他人节省几个小时的工作量!