Нажатие клавиши Tab на iPad Pro вызывает textFieldShouldBeginEditing (_ :) для всех текстовых полей. - PullRequest
0 голосов
/ 10 октября 2019

Я работаю над формой, которая содержит несколько UITextField экземпляров, и мне нужно вызвать побочный эффект (то есть представить предупреждение), когда одно конкретное текстовое поле, чей метод делегата textFieldShouldBeginEditing(_:) всегда возвращает false, являетсяselected.

Существующая реализация этой функции вызвала этот побочный эффект в методе делегата textFieldShouldBeginEditing(_:). Это вызывало проблемы на iPad Pro, потому что когда пользователь нажимает клавишу Tab на экранной клавиатуре, этот метод вызывается не только для следующего респондента, но и для всех текстовых полей в форме, что приводит к побочному эффектубыть запущенным в неподходящее время.

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

override func viewDidLoad() {

    super.viewDidLoad()

    for textField in [textField1, textField2, textField3] {
        textField?.delegate = self
    }

    let keyCommand = UIKeyCommand(input: "\t", modifierFlags: [], action: #selector(didPressTabKey(sender:)))
    self.addKeyCommand(keyCommand)
}

@objc func didPressTabKey(sender: UIKeyCommand) {
    NSLog("Did press tab key")
}

К сожалению, действие UIKeyCommand вызывается только при нажатии клавиши Tab на внешней клавиатуре (то есть клавиатуре Mac при работе на симуляторе) и никогда не срабатывает при использовании iPad Pro. экранная клавиатура (на симуляторе и реальных устройствах).

Очевидный способ обойти эту проблему - переместить побочный эффект от textFieldShouldBeginEditing(_:) в textFieldDidBeginEditing(_:), но, учитывая, что мне нужно вызватьэто когда textFieldShouldBeginEditing(_:) возвращает false, этот подход не является удовлетворительным.

Текущий обходной путь, который я реализуюd - убрать побочный эффект из textFieldShouldBeginEditing(_:) и явно прослушивать нажатия на UITextField. При таком подходе побочный эффект корректно срабатывает, когда пользователь выбирает это конкретное текстовое поле, но нет способа вызвать его, когда пользователь нажимает клавишу Tab при редактировании предыдущего поля в порядке табуляции формы.

Есть ли способ перехватить нажатие клавиши Tab на экранной клавиатуре?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...