如何在UITextField上自动打开键盘?

61

我有一个非常简单的表格,当点击单元格时会打开一个带有一个UITextfield的新视图。我想要的是键盘自动弹出,而无需用户触摸UITextfield。

这一切都是在Interface Builder中完成的,所以我不确定该如何做。我猜需要在某个时候设置焦点吗?

谢谢

4个回答

139

要立即弹出键盘,你需要使用以下代码将文本字段设置为第一响应者:

[textField becomeFirstResponder];

您可能希望将此放置在viewDidAppear:方法中。


30
我建议使用-viewDidAppear:方法,因为它可以生成动画效果。在-viewWillAppear中生成动画效果可能会导致图形上的瑕疵,因为此时视图尚未显示在屏幕上。由于您几乎肯定希望每次显示屏幕时都有动画效果,所以-viewDidLoad可能是多余的(因为它会在从磁盘加载视图时发生,这有些不可预测,因此不是一个好的视觉效果位置)。 - Rob Napier
在这样做时,您需要导入UITextViewDelegate委托并将其连接到IB中的委托吗? - Supertecnoboff
3
在Swift 3中,重写viewDidAppear(_ animated: Bool)方法可以让文本框(textField)成为第一响应者(即获取焦点)。具体代码如下:override func viewDidAppear(_ animated: Bool) { textField.becomeFirstResponder() } - emy

13

Swift 3和4:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    textField.becomeFirstResponder()
}

为了避免奇怪的副作用,还要调用 super.viewDidAppear(animated) - Piidro

1
override func viewDidLoad() {
    super.viewDidLoad()
    textField.becomeFirstResponder()
}

0

最好在主线程上添加第一响应者 -

 override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    self.textField.becomeFirstResponder()
}

当视图控制器视图被添加为子视图时,这将非常有用。


3
我相当肯定DispatchQueue.main.async是不必要的,因为viewDidAppear已经在主线程上运行了。 - Joshua Wolff
在许多其他情况下,你必须记得这样做!但有些情况下则是“真”的。 - Fattie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接