Быстро: Стань первым ответчиком на UITextField не работает?

Я создал пользовательский UIViewController с одним UITextField на Storyboard. На viewDidLoad я установил UITextFIeld в becomeFirstResponder, ничего не произошло (клавиатура не появилась).

Затем я попробовал позвонить resignFirstResponder(), но он вернул false. Затем я попытался найти, с кем first responder перебирает все подзоны с помощью кода over @Получить текущего первого ответчика без использования частного API. Оказывается, ни один из подпунктов не является первым ответчиком.

My ViewController в раскадровке

enter image description here

Мой код

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.
    }
}

Так просто, как это получается... ПОЧЕМУ НЕ КЛАВИАТУРА СКОРО! Одна вещь, которая у меня есть, - это автоматический макет, но я не уверен, что это скажется на клавиатуре.

Ответ 1

Я только что протестировал его с помощью текстового поля, вызвав функцию self.tf.becomeFirstResponder() indside viewDidLoad(), и ее работа абсолютно прекрасна. Вам нужно будет переключить клавиатуру, нажав команда + K, поскольку nflacco просто указал и отключил аппаратную клавиатуру в симуляторе как:

  • iOS Simulator → Оборудование → Клавиатура
  • Снимите флажок "Подключить аппаратную клавиатуру"

Ответ 2

Swift 4 у меня сработало
попробуй

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

    DispatchQueue.main.async {
        self.textView.becomeFirstResponder()
    }

}

Ответ 3

Я думаю,

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()
    }
}

Ответ 4

Swift 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()
        }
    }
}

Надеюсь, это поможет кому-то застрять с той же проблемой.

Ответ 5

нажмите Ctrl + Shift + K, чтобы открыть клавиатуру.

Ответ 6

попробуйте с этим

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

иногда неправильно отображается время в представлении