【问题标题】:How to open the keyboard automatically on UITextField?如何在 UITextField 上自动打开键盘?
【发布时间】:2011-01-17 10:11:45
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: iphone objective-c interface uitextfield builder


    【解决方案1】:

    要使键盘立即显示,您需要使用以下行将文本字段设置为第一响应者:

    [textField becomeFirstResponder];
    

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

    【讨论】:

    • 我推荐 -viewDidAppear:,因为它会生成动画。在 -viewWillAppear 中生成动画可能会导致图形伪影,因为您还没有出现在屏幕上。由于您几乎可以肯定每次进入屏幕时都需要它,因此 -viewDidLoad 可能是多余的(每次从磁盘加载视图时都会发生这种情况,这有点不可预测,因此不是视觉效果的好地方)。
    • 这样做时是否需要导入UITextViewDelegatedelegate,然后在IB中连接到delegate?
    • 对于 Swift 3:override func viewDidAppear(_ animated: Bool) { textField.becomeFirstResponder() }
    【解决方案2】:

    斯威夫特 3 和 4:

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

    【讨论】:

    • 为了避免奇怪的副作用,也请致电super.viewDidAppear(animated)
    【解决方案3】:
    override func viewDidLoad() {
        super.viewDidLoad()
        textField.becomeFirstResponder()
    }
    

    【讨论】:

      【解决方案4】:

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

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

      当视图控制器视图被添加为子视图时,这将派上用场。

      【讨论】:

      • 我很确定 DispatchQueue.main.async 是不必要的,因为 viewDidAppear 无论如何都在主线程上运行
      猜你喜欢
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      • 1970-01-01
      • 2021-12-15
      • 2010-11-10
      • 2011-08-26
      相关资源
      最近更新 更多