Проверьте на разделенную клавиатуру - PullRequest
15 голосов
/ 21 октября 2011

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

Есть ли способ проверить, какая раскладка клавиатуры используется до ее появления?

Спасибо!

Ответы [ 4 ]

17 голосов
/ 09 января 2012

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

Если клавиатура установлена ​​в док-станцию, будет повышено значение UIKeyboardWillShowNotification, и будет выполняться следующее:

[[[notification userInfo] valueForKey:@"UIKeyboardFrameChangedByUserInteraction"] intValue] == 1

клавиатура отсоединена, UIKeyboardWillHideNotification будет поднята, и приведенное выше утверждение также будет верным.

Использование этой информации было достаточным для кодирования моего пользовательского интерфейса.

Примечание: этовозможно, это нарушение правил Apple, я не уверен.

9 голосов
/ 21 ноября 2012

Это решение, которое работает с разделенными клавиатурами iPad (первоначально из блога, указанного в комментарии Зеешана)

[[NSNotificationCenter defaultCenter] 
  addObserverForName:UIKeyboardDidChangeFrameNotification
  object:nil
  queue:[NSOperationQueue mainQueue]
  usingBlock:^(NSNotification * notification)
 {
     CGRect keyboardEndFrame =
     [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];

     CGRect screenRect = [[UIScreen mainScreen] bounds];

     if (CGRectIntersectsRect(keyboardEndFrame, screenRect))
     {
         // Keyboard is visible
     }
     else
     {
         // Keyboard is hidden
     }
}];
5 голосов
/ 11 июля 2012
Клавиша

UIKeyboardFrameChangedByUserInteraction не возвращает 1 все время, когда клавиатура разделяется.

Ниже приведены полные значения ключа словаря информации пользователя для UIKeyboardDidShowNotification / UIKeyboardDidHideNotification.

2012-07-11 11:52:44.701 Project[3856:707] keyboardDidShow: {
    UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {1024, 352}}";
    UIKeyboardCenterBeginUserInfoKey = "NSPoint: {512, 944}";
    UIKeyboardCenterEndUserInfoKey = "NSPoint: {512, 592}";
    UIKeyboardFrameBeginUserInfoKey = "NSRect: {{-352, 0}, {352, 1024}}";
    UIKeyboardFrameChangedByUserInteraction = 0;
    UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 0}, {352, 1024}}";
}

2012-07-11 11:52:45.675 Project[3856:707] keyboardDidHide: {
    UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {1024, 352}}";
    UIKeyboardCenterBeginUserInfoKey = "NSPoint: {512, 592}";
    UIKeyboardCenterEndUserInfoKey = "NSPoint: {512, 944}";
    UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 0}, {352, 1024}}";
    UIKeyboardFrameChangedByUserInteraction = 0;
    UIKeyboardFrameEndUserInfoKey = "NSRect: {{-352, 0}, {352, 1024}}";
}

Вместо этого вы можете использовать клавиши UIKeyboardCenterBeginUserInfoKey или UIKeyboardCenterEndUserInfoKey, чтобы получать уведомления о расколе клавиатуры.

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

1 голос
/ 21 октября 2011

Уведомления, которые публикуются, когда клавиатура появляется или меняет свое положение (UIKeyboardWillShowNotification, UIKeyboardWillChangeFrameNotification), содержат словарь userInfo с рамкой клавиатуры (UIKeyboardFrameEndUserInfoKey), которая позволяет позиционировать элементы пользовательского интерфейса.правильно, в зависимости от фактического размера и расположения клавиатуры.

...