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, и отключить аппаратную клавиатуру в симуляторе как:
- Симулятор iOS -> Аппаратное обеспечение -> Клавиатура
- Снимите флажок "Подключить аппаратную клавиатуру"
Я думаю
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()
}
иногда неправильное время для рендеринга вида