18

我在 Storyboard 上创建了一个带有一个 UITextField 的自定义 UIViewController。在 上viewDidLoad,我将 UITextFIeld 设置为becomeFirstResponder,什么也没发生(没有弹出键盘)。

然后我尝试调用resignFirstResponder(),但它返回错误。接下来,我试图通过使用 @Get the current first responderfirst responder上的代码循环所有子视图来查找是谁,而不使用私有 API。事实证明,没有一个子视图是第一响应者。

故事板中的我的 ViewController

在此处输入图像描述

我的代码

class BLTestViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet var tf: UITextField

    override func viewDidLoad() {
        super.viewDidLoad()

        tf.delegate = self
        tf.becomeFirstResponder()
        // Do any additional setup after loading the view.
    }
}

就这么简单...为什么没有键盘出现!!!我所做的一件事是自动布局,但我不确定这是否会影响键盘弹出。

4

6 回答 6

24

Swift 4 它对我 有用,
试试吧

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    
    textView.becomeFirstResponder()
    
}
于 2018-09-05T07:04:57.143 回答
21

我刚刚通过调用self.tf.becomeFirstResponder()indsideviewDidLoad()函数使用文本字段对其进行了测试,它的工作非常好。您需要通过按命令 + K来切换键盘,正如 nflacco 刚刚指出的那样,并在模拟器中禁用硬件键盘,如下所示:

  1. iOS 模拟器 -> 硬件 -> 键盘
  2. 取消选中“连接硬件键盘”
于 2015-01-01T10:08:53.640 回答
6

我认为

class BLTestViewController: UIViewController, UITextFieldDelegate {

@IBOutlet var tf: UITextField

    override func viewDidLoad() {
        super.viewDidLoad()

        tf.delegate = self
        self.focustf()
        // Do any additional setup after loading the view.
    }

    func focustf(){
    self.tf.becomeFirstResponder()
    }
}
于 2014-12-11T07:27:06.633 回答
5

斯威夫特 4 和 iOS 11

就我而言,无论我尝试了什么,我都无法设置第一响应者,直到我尝试了这个。

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    if cell.isKind(of: YOURTABLEVIEWCELL.self) {
        if let yourCell = cell as? YOURTABLEVIEWCELL{
            yourCell.yourUiTextField.becomeFirstResponder()
        }
    }
}

希望这可以帮助遇到同样问题的人。

于 2018-02-13T19:07:50.483 回答
2

延迟后尝试设置:

DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
    textField.becomeFirstResponder()
}                

有时错误是渲染视图的时间

于 2019-10-09T15:53:09.907 回答
0

如果您使用的是 iOS 模拟器,请按⌘ command+ shift+K打开键盘。

于 2019-10-03T12:33:07.173 回答