Почему функция 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
}

но мы также можем настроить это через раскадровку во время сборки.

щелкните правой кнопкой мыши по текстовому полю, чтобы проверить, установлен ли делегат:

enter image description here

если этот круг рядом с delegate не заполнено, мы не установили делегат для нашего UITextField еще.

установить делегат, наведите курсор на этот кружок. Он изменится на знак "плюс". Теперь нажмите и перетащите на контроллер вида, который вы хотите делегировать текстовое поле (контроллер вида, частью которого является текстовое поле).

enter image description here

когда вы соответствующим образом подключили контроллер вида в качестве делегата, это меню должно выглядеть следующим образом:

enter image description here


Я зарегистрирован в курсе 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