【问题标题】:Problems with UITextField & Keyboard Management in iOSiOS 中的 UITextField 和键盘管理问题
【发布时间】:2012-06-14 09:21:41
【问题描述】:

(我目前的目标是 iOS 2.0。)

我有一个子类 UITextField 并实现 UITextFieldDelegate 协议。

一开始我没有把class设置为自己的delegate,当我在字段中点击时,键盘自动弹出。到现在为止还挺好。

我使用 UIReturnKeyDone 发送 setReturnKeyType: 消息,因此它会将右下角的按钮更改为“完成”。

问题是,当我点击完成或按下 [Return] 时,什么都没有发生 - 键盘不会消失。

我尝试将 self 添加为结束编辑通知的观察者,但单击完成时它从未被调用;从谷歌搜索来看,似乎只有当该字段辞去第一响应者时才会被解雇——这是我无法做到的。

然后我在这里找到了建议添加 self 作为委托并处理 textFieldShouldReturn: 的答案。问题是,一旦我将 self 添加为委托,当您单击该字段时键盘不再弹出(并且它没有获得焦点) - 它似乎没有成为第一响应者。

我尝试处理 textFieldShouldBeginEditing: 并返回 YES(文档说如果没有被覆盖应该是默认值),这被调用了,但没有任何区别。在我的无知中,我尝试了 [textField becomeFirstResponder] 并获得了堆栈溢出的奖励(现在我知道这是为了响应 trying 成为第一响应者而调用的)。

我现在彻底卡住了!

有人可以帮忙吗?我只希望当用户单击完成或按 [Return] 时键盘消失。

【问题讨论】:

  • 删除任何其他内容并添加此委托 - (BOOL)textFieldShouldReturn:(UITextField *)theTextField { [theTextField resignFirstResponder];return YES; }
  • 我假设您在这里说“使用单独的对象作为委托”?我刚刚发现我们不应该使用文本字段作为它自己的代表。当它试图显示键盘时,我遇到了一个无限循环 - 因此,没有出现键盘。

标签: ios keyboard return hide


【解决方案1】:

您是使用 xib 还是以编程方式进行?如果您使用的是 xib,那么您可能忘记在 File's Owner 中连接委托。

(BOOL)textFieldShouldReturn:(UITextField *)textField   
{
    [textField resignFirstResponder];
    return YES;
}

试试这个。

【讨论】:

  • 我已经在上面提到过使用它 - 因为键盘现在永远不会显示,所以它永远不会被调用。
【解决方案2】:

我的错。事实证明,您不应该将文本字段的委托设置为自身 - 由于未处理的选择器被转发给其委托,因此存在复杂性。如果它没有响应选择器,则消息将发送给它的委托……这就是它本身,我们已经知道它没有响应。因此,无限循环。

使用单独的对象作为委托非常有效。

希望这将帮助其他人避免同样的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    相关资源
    最近更新 更多