Кто-нибудь нашел хороший способ использования новых событий клавиатуры iOS5? - PullRequest
25 голосов
/ 12 ноября 2011

Во время разработки недавней функции для моего приложения для iPad я понял, что новое поведение стыковки / расщепления клавиатуры iOS5 вызывает огромные проблемы. Я использую InputAccessoryView для клавиатуры с текстовым полем, похожим на функцию поиска на странице Safari. Я отображаю клавиатуру поверх прокручиваемого UIWebView, поэтому отчасти мои проблемы связаны с уменьшенным UIWebview, когда клавиатура пристыкована, и с (в основном) полноэкранным веб-обзором, когда она отсоединена.

Основные проблемы, с которыми я столкнулся с API, заключаются в том, что новые уведомления UIKeyboardWillChangeFrameNotification и UIKeyboardDidChangeFrameNotification в лучшем случае являются шагом назад по сравнению с предыдущим API, и в них содержатся данные об мусоре, из-за которых практически невозможно понять, что на самом деле делает клавиатура много дел.

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

  • Отключение клавиатуры
  • Клавиатурные доки
  • Раскол клавиатуры / Unsplits
  • Отображение раскрепленной клавиатуры
  • скрытая клавиатура скрывает
  • Вид вращается, когда клавиатура отсоединена

Я придумал некоторые абстракции для распознавания пристыкованных или закадровых кадров, но даже с этим мой код становится очень неуправляемым. Если вы нашли лучшие способы сделать это, пожалуйста, ответьте или прокомментируйте. Я надеюсь, что я что-то здесь упускаю. Спасибо.

1 Ответ

4 голосов
/ 31 декабря 2011

Дело не в том, чтобы задуматься над этим. Ничего важного не изменилось. Если клавиатура находится в закрепленном положении в нижней части экрана, вы получите уведомление «показать». Если он покинет закрепленную позицию внизу экрана, вы получите уведомление «скрыть». Это именно то, что произошло до iOS 5.

Единственное отличие состоит в том, что вместо выхода из закрепленной позиции, поскольку она перемещается за пределы экрана, она может выходить из закрепленной позиции, потому что пользователь отстыковал ее. Вы по-прежнему получите «спрятаться», так что вы можете переместить свой интерфейс обратно в исходное положение. Вам не нужно знать, что клавиатура теперь отстыкована (хотя вы можете узнать, что она не за кадром от UIKeyboardDidChangeFrameNotification, если вы действительно этого хотите). Причина, по которой вам не нужно знать, состоит в том, что, когда клавиатура отсоединена / разделена, пользователь может действовать упреждающе и перемещать клавиатуру, если это мешает чему-то, что нужно видеть.

Таким образом, весь ваш старый код до iOS 5 продолжает нормально работать. Это действительно очень умно ...

...