iOS заставляет пользовательскую клавиатуру генерировать стандартные нажатия клавиш для UITextField - PullRequest
7 голосов
/ 12 января 2012

ОК. Я посмотрел и посмотрел, и мне кажется, что мне чего-то не хватает в пользовательских клавиатурах и вставке текста в UITextField. Как и многие люди, я создаю пользовательскую клавиатуру UIView со своим собственным набором клавиш на пользовательском UIButtons. Затем я назначаю это представление для inputView UITextField, и затем моя клавиатура появляется, когда это текстовое поле становится первым респондентом. Внутри клавиатуры я фиксирую действия кнопок и переводю их в нажатия клавиш.

Но отсюда я озадачен тем, как лучше всего отправить мои нажатия клавиш в текстовое поле. Я видел множество примеров, таких как Обновление пользовательской клавиатуры iOS в текстовом поле в родительском представлении и Возврат входных данных в поле UIText с пользовательским представлением ввода и Как вставить значение ключа в UITextView из пользовательской клавиатуры В iOS , где решение, по-видимому, заключается в том, чтобы вставить указатель на цель UITextField внутри пользовательского представления.

Это не кажется мне правильным, так как для нескольких UITextFields либо мне приходится вручную изменять ссылки на одной пользовательской клавиатуре всякий раз, когда новое текстовое поле становится первым респондентом, либо мне приходится носить с собой соответствующие пользовательские настройки. клавиатура для каждого текстового поля, которое я хочу поддерживать.

Мне кажется, что клавиатура должна просто переводить касания в токены и отправлять эти токены вверх по линии, чтобы их интерпретировал тот, кто их получает (первый респондент?). iPad для разработчиков iPhone 101 Учебное пособие по пользовательскому вводу , кажется, делает это, но создает собственный протокол для этого. Я представляю (на самом деле SWAG - Scientific Wild Arsed Guess), что стандартные клавиатуры iOS работают таким же образом, но используют специальный протокол для передачи нажатий клавиш. Поэтому я хочу вручную создать ту же цепочку событий / сообщений, что и стандартная клавиатура.

Так как я могу это сделать? Или я могу даже сделать это с публичными API? Или работа стандартных клавиатур слишком тесно связана с UITextField?

Ответы [ 2 ]

1 голос
/ 12 января 2012

Это очень открытый вопрос. На самом деле, это зависит от вас, чтобы выбрать то, что вы хотите. Документация Apple гласит:

Подвиды вида ввода и дополнительного вида ввода могут быть любыми. Если они являются кнопками или другими элементами управления, вам необходимо указать цели и действия для каждого элемента управления и реализовать соответствующие методы действий для ввода или манипулирования данными.

Вы также можете создать подкласс UITextField и явно реализовать метод получения для inputView, чтобы возвращать указатель на ваш пользовательский класс представления клавиатуры. В этом геттере вы можете настроить UIControl-подобную систему цели / действия, как вы предлагали ранее. Делая это таким образом, избавляет от необходимости устанавливать пользовательскую клавиатуру снаружи - все это обрабатывается внутри. Он также помещает этот код только в одно место.

Как только пользовательское текстовое поле подает в отставку первому респонденту, вы можете убрать указатель текстового поля с клавиатуры.

0 голосов
/ 08 февраля 2012

Я новичок в iOS, поэтому, пожалуйста, прости меня, если то, что я говорю, не имеет смысла (и будь любезен, чтобы исправить меня, пожалуйста). : D

Нет ли способа, чтобы ваша пользовательская клавиатура прошла через все UITextFields в основном UIView в поисках FistResponder и отправила свои сообщения этому FirstResponder? Я имею в виду, что у UIView есть свойство subviews, где вы можете найти UITextFields и найти FirstResponder, используя свойство [UITextField isFirstResponder]. Тогда не могли бы вы использовать этот объект?

Опять же, извините, если это не имеет смысла, но я также очень заинтересован в этой теме и хотел бы внести небольшой вклад.

...