как заставить UIKeyInput делать повторные вызовы deleteBackwards


В настоящее время я использую UIKeyinput, но он посылает только одно событие delteBackward, даже если я долго удерживаю клавишу delete. Как я могу заставить его отправить мне несколько вызовов событий, когда я удерживаю delete в течение длительного времени?

2 8

2 ответа:

Нет простого способа заставить системную клавиатуру выполнять автоматическое повторение. Это оставляет вам два варианта:

  1. подделайте его, используя наложение на клавиатуре (см. комментарий @pho0)
  2. реализуйте пользовательскую клавиатуру, установите ее в качестве inputView для вашего вида или контроллера вида и реализуйте пользовательский протокол, поддерживающий автоматический повтор.

Решение 1 хорошо работает, если вам нужна только клавиша delete для автоматического повтора, но если вам нужны все клавиши для автоматического повтора наложения код становится таким же сложным, как и пользовательский вариант клавиатуры. (Наложение требует прямоугольника для каждой клавиши, так почему бы просто не заменить нижележащую клавиатуру).

Решение 2 предполагает определенный объем "авансовой" работы... Один из способов сделать это-определить класс cap клавиш (например, физический ключ) и класс раскладки клавиатуры.

Я реализовал оба решения в проектах, над которыми я работал, но в настоящее время я использую решение 2, так как я могу создать любую клавиатуру, которую мне нравится. В простом случае использовать никогда не нужно знать, что это не системная клавиатура. Для опытных пользователей они могут настроить клавиатуру так, как они считают нужным.

Как бы то ни было, я счел полезным, чтобы класс клавиатуры был немым; он просто сообщает, что клавиша перешла в состояние "вниз" или "вверх". Дополнительный класс выше, который решает, какие действия следует предпринять.

В некотором смысле, я знаю, что это не тот ответ, который вы искали, но я надеюсь, что это поможет, IDZ

Одна вещь, которую я видел, как люди делают, - это ставят фальшивую кнопку поверх кнопки клавиатуры. Когда кто-то удерживает его, пусть таймер удаляет последнюю букву каждый раз, когда он срабатывает.

Надеюсь, это поможет.