Swift: стать первым респондентом на UITextField не работает?

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

Я тогда попробовал позвонить resignFirstResponder(), но он вернулся ложным. Затем я попытался найти, кто first 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 ответа

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

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

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

}

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

  1. Симулятор iOS -> Аппаратное обеспечение -> Клавиатура
  2. Снимите флажок "Подключить аппаратную клавиатуру"

Я думаю

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

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

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

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

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

иногда неправильное время для рендеринга вида

нажмите command+shift+k, чтобы открыть клавиатуру.

Другие вопросы по тегам