Почему функция textFieldShouldReturn не вызывается?
на textFieldShouldReturn
функция не вызывается вообще: ошибок нет, но клавиатура вообще не отвечает.
мой случай отличается от как скрыть клавиатуру в swift при нажатии клавиши возврата? поскольку в моем случае ничего не происходит вообще, а другие случаи находятся в объективном-C.
вот мой код:
import UIKit
class ViewController: UIViewController {
@IBOutlet var textField: UITextField!
func textFieldShouldReturn(textField: UITextField) -> Bool {
resignFirstResponder()
return true
}
}
textField-это выход в текстовое поле на моей раскадровке. Я также пытался self.endEditing
вместо resignFirstResponder
.
4 ответов
остальная часть этого ответа по-прежнему очень полезна, и я оставлю ее там, поскольку она потенциально может помочь другим спрашивающим... но здесь я пропустил очевидную проблему с этим конкретным примером...
мы не называем resignFirstResponder
в текстовом поле. Мы вызываем его на контроллер вида. Нам нужно вызвать его в текстовом поле, поэтому измените свой код так, чтобы он выглядел так:
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
A UITextField
будет вызывать только textFieldShouldReturn
свойство объекта, который является его делегат.
мы можем исправить это программно, добавив viewDidLoad
метод для установки этого:
override func viewDidLoad() {
super.viewDidLoad()
self.textField.delegate = self
}
но мы также можем настроить это через раскадровку во время сборки.
щелкните правой кнопкой мыши по текстовому полю, чтобы проверить, установлен ли делегат:
если этот круг рядом с delegate
не заполнено, мы не установили делегат для нашего UITextField
еще.
установить делегат, наведите курсор на этот кружок. Он изменится на знак "плюс". Теперь нажмите и перетащите на контроллер вида, который вы хотите делегировать текстовое поле (контроллер вида, частью которого является текстовое поле).
когда вы соответствующим образом подключили контроллер вида в качестве делегата, это меню должно выглядеть следующим образом:
Я зарегистрирован в курсе Swift 4 Udemy, и инструктор сказал добавить класс UITextFieldDelegate для ViewController в дополнение к Cntrl - перетаскиванию из текстового поля в кнопку ViewController и выбору делегата.
импорт UIKit
class ViewController: UIViewController, UITextFieldDelegate {
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
Ну, в моем случае. Я случайно включаю аппаратную клавиатуру. Убедитесь, что вы сняли флажок "подключиться к аппаратной клавиатуре", чтобы клавиатура отображалась в симуляторе.
оборудование - > клавиатура - > подключение к аппаратной клавиатуре
надеюсь, что это поможет и другим!
при использовании Swift 3+ Необходимо добавить подчеркивание перед первым свойством. Например:
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
Это также очень хорошо документировано в документации Apple. https://developer.apple.com/documentation/uikit/uitextfielddelegate/1619603-textfieldshouldreturn