UITextField Делегат textFieldShouldReturn не вызывается с возвратом аппаратной клавиатуры - PullRequest
0 голосов
/ 28 февраля 2019

iOS 12, Xcode 10.1.У меня есть представление, которое имеет UITextField.Соединение делегата подключено к контроллеру представления в раскадровке.Я делал это несколько раз раньше.

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

extension SignInViewController: UITextFieldDelegate {

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
      switch textField {
      case loginEmailField:
        loginPasswordField.becomeFirstResponder()
      case loginPasswordField:
        loginPasswordField.resignFirstResponder()
        signInTapped(sender: UIButton())
      default: break
      }
    return true
    }
}

С подключенной аппаратной клавиатурой, либо с моим iPad Pro с чехлом для клавиатуры, либо на моем Mac с симулятором, метод делегата не срабатывает.Поднимите экранную клавиатуру, и она отлично работает.

Я реализовывал подобные вещи раньше, и я ломал голову, чтобы увидеть какие-либо различия между ними, но безрезультатно.На какие потенциальные причины я могу посмотреть, чтобы решить эту проблему и заставить работать клавиши возврата аппаратных клавиатур?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Я пробовал это, и textFieldShouldReturn вызывается правильно, когда на симуляторе нажата клавиша Return / Enter , с клавиатурой Mac и с внешней клавиатурой Bluetooth на реальном iPhone и iPad.Возможно, есть проблема с вашей UITextFieldDelegate настройкой?

Я также попытался подключить delegate как в коде (как показано ниже), так и через Interface Builder, и оба работают.

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet var textFieldA: UITextField!
    @IBOutlet var textFieldB: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        textFieldA.delegate = self
        textFieldB.delegate = self
    }

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {

        switch textField {
        case textFieldA:
            textFieldB.becomeFirstResponder()
        case textFieldB:
            textFieldB.resignFirstResponder()
        default:
            break
        }
        return true
    }
}
0 голосов
/ 28 февраля 2019

Вы можете прослушать UIKeyboardWillHideNotification из NotificationCenter.

...