iOS 中的 UITextField 和键盘管理问题
Posted
技术标签:
【中文标题】iOS 中的 UITextField 和键盘管理问题【英文标题】:Problems with UITextField & Keyboard Management in iOS 【发布时间】: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; 我假设您在这里说“使用单独的对象作为委托”?我刚刚发现我们不应该使用文本字段作为它自己的代表。当它试图显示键盘时,我遇到了一个无限循环 - 因此,没有出现键盘。 【参考方案1】:您是使用 xib 还是以编程方式进行?如果您使用的是 xib,那么您可能忘记在 File's Owner 中连接委托。
(BOOL)textFieldShouldReturn:(UITextField *)textField
[textField resignFirstResponder];
return YES;
试试这个。
【讨论】:
我已经在上面提到过使用它 - 因为键盘现在永远不会显示,所以它永远不会被调用。【参考方案2】:我的错。事实证明,您不应该将文本字段的委托设置为自身 - 由于未处理的选择器被转发给其委托,因此存在复杂性。如果它没有响应选择器,则消息将发送给它的委托……这就是它本身,我们已经知道它没有响应。因此,无限循环。
使用单独的对象作为委托非常有效。
希望这将帮助其他人避免同样的问题。
【讨论】:
以上是关于iOS 中的 UITextField 和键盘管理问题的主要内容,如果未能解决你的问题,请参考以下文章
ScrollView 中的 UITextField 在 iOS 中不显示键盘
iOS7 模拟器中的 UITextField 不接受来自 mac 键盘的任何输入