UITextView becomeFirstResponder 无法正常工作

Posted

技术标签:

【中文标题】UITextView becomeFirstResponder 无法正常工作【英文标题】:UITextView's becomeFirstResponsder not working proprly 【发布时间】:2011-12-29 15:20:58 【问题描述】:

我有一个UIView 和一个UITextViewUITextField 作为子视图。我希望键盘在textFieldShouldReturn 通话时自动出现。

- (BOOL)textFieldShouldReturn:(UITextField *)textField

    [textField resignFirstResponder];
    [textView becomeFirstResponder];
    return YES;

但这不起作用并且由于某种原因,它会在文本视图的下一行显示带有光标的键盘。我试图在 textview 中设置文本 nil 但它会自动调用 textDidChange 方法并且光标在没有任何文本的情况下移动到新行。

同样的技术适用于UITextField,它也适用于 ios 5.0,但如何在 iOS 4.3 中解决此问题。如果您还有其他选择,请告诉我。

我是否遗漏了一些明显的东西?

【问题讨论】:

你能显示更多的代码吗?此外,如果您使用 Storyboard,我相信有一种方法可以在视图首次出现时选择 UITextView,这应该会调出键盘,因此您不必手动操作。 添加到 Kinetic 的评论中,Storyboard 项目只能为 iOS 5 正确编译,因此这可能是一个问题。如果没有,也许您在 UITextView 委托方法中做了一些时髦的事情?发布更多代码以获得更具体的帮助,因为您发布的块似乎不是问题。 【参考方案1】:

iOS 中有一个已知错误,即在同一个运行循环中辞职并成为第一响应者。试试下面的

[textField resignFirstResponder];
[textView performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0];

【讨论】:

顺便说一句,我认为你之前不必调用resignFirstResponder,我认为becomeFirstResponder就足够了。

以上是关于UITextView becomeFirstResponder 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

当 UITextView 的文本超出 1 行时展开 UITextView 和 UITableView

选择另一个 UITextView 时,如何阻止 UITextView 退出第一响应者/关闭键盘?

从 UIView 中的 UITextView 复制文本后,UITextView 更改为 UIWebDocumentView?

UITextView 数据变化迅速

UITextView contentInset 在 iOS 7 上的 UITextView 中不起作用?

UITextView 设置属性后做啥?