Быстро: Стань первым ответчиком на 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()
}
иногда неправильно отображается время в представлении