【问题标题】:iPad popover textfield - resignFirstResponder doesn't dismiss keyboardiPad弹出文本字段 - resignFirstResponder 不会关闭键盘
【发布时间】:2011-02-08 21:57:05
【问题描述】:

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

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

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

     [theTextField resignFirstResponder];
     return NO;
}

【问题讨论】:

  • 听起来像一个错误。我建议在 bugreport.apple.com 上提交报告。
  • 当 textFields 在 modalPresentationStyle = UIModalPresentationFormSheet 的模式视图中时遇到同样的问题
  • 我也遇到了这个错误。
  • 参考stackoverflow.com/questions/3372333/

标签: iphone ipad uipopovercontroller


【解决方案1】:

查看this问题:

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

- (BOOL)disablesAutomaticKeyboardDismissal {
    return NO;
}

【讨论】:

【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        总结——

        我遇到了类似的问题(在某种情况下)并尝试了所有方法 - 无济于事 - 我的可能解决方案列表中包含 [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#] 没有!

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

        【讨论】:

          猜你喜欢
          • 2011-03-21
          • 1970-01-01
          • 2016-01-08
          • 2011-09-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多