1

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

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

一开始我没有设置类为自己的委托,当我在字段中点击时,键盘自动弹出。到目前为止,一切都很好。

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

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

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

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

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

我现在彻底卡住了!

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

4

2 回答 2

2

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

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

试试这个。

于 2012-06-14T09:26:54.203 回答
0

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

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

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

于 2012-06-15T05:05:40.933 回答