2010-05-20 2 views
17

IPAD виртуальная клавиатура исчезнет в одном из (по крайней мере) этих 3 обстоятельства:Обнаружение скрытия клавиатуры iPad против внешней клавиатуры?

  1. Если элемент управления (скажем, UITextField) программно отказывает первый респондент.
  2. Если пользователь нажал кнопку «убрать клавиатуру» в правом нижнем углу.
  3. Если пользователь подключается к периферии периферийного устройства USB/клавиатуры.

Во всех случаях я получаю UIKeyboardWillHideNotification.

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

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

Но как я могу сказать разницу?

Приложение Apple's Pages, похоже, может отличить это от переименования в документе.

ответ

2

Я бы посмотрел на UIKeyboardBoundsUserInfoKey, переданный с уведомлением. Физическая клавиатура, вероятно, имеет пустые границы.

+0

К сожалению, нет. Физическая клавиатура не генерирует UIKeyboardWillShowNotification, когда она появляется. Прикрепление его просто генерирует уведомление WillHide, соответствующее виртуальному. –

+0

В случае 1 управление теряет фокус. То же самое верно в случае 2? Я полагаю, что в случае 3 управление сохраняет фокус. – drawnonward

+0

В случаях 2 и 3 управление продолжает оставаться первым ответчиком. Отказ от первого ответчика отклонит клавиатуру, но противоположность, по-видимому, не верна. –

2

Похоже, вы просто пытаетесь выяснить, когда пользователь закончил редактирование. Вы можете слушать для UITextFieldTextDidEndEditingNotification уведомления для случаев 1 и 2.

Гораздо более простое решение было бы не могли бы вы проверить против editing имущества UITextField, чтобы определить, является ли она по-прежнему предполагается редактирование или нет? У меня нет физической клавиатуры, поэтому у меня нет возможности проверить это. Я просто догадываюсь.

Вот ссылка на документацию по этому свойству: http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITextField_Class/Reference/UITextField.html#//apple_ref/occ/instp/UITextField/editing

Мне очень интересно знать, если это работает или нет ... :)

+0

Для случая № 2 текстовое поле по-прежнему редактируется, и оно по-прежнему является первым ответчиком. Там просто нет клавиатуры. –

Смежные вопросы