Проверьте наличие разделенной клавиатуры
Как многие из вас знают, iOS 5 представила гладкую разделенную клавиатуру для ввода большого пальца. К сожалению, у меня есть некоторый пользовательский интерфейс, который зависит от обычной полноэкранной раскладки клавиатуры. Один из моих контроллеров отображает пользователя с листом ввода текста, и если они нажмут на textField, который будет закрыт клавиатурой, он сместится вместе с клавиатурой. Это действие не требуется с помощью разделенной клавиатуры.
Есть ли способ проверить, какая раскладка клавиатуры используется до того, как она появится?
Спасибо!
Ответы
Ответ 1
Когда клавиатура состыкована, UIKeyboardWillShowNotification
будет поднят. Если клавиатура разделена или отстыкована, уведомления о клавиатуре не поднимаются.
Если клавиатура состыкована, UIKeyboardWillShowNotification
будет поднята, и будет выполнено следующее:
[[[notification userInfo] valueForKey:@"UIKeyboardFrameChangedByUserInteraction"] intValue] == 1
Если клавиатура отстыкована, будет добавлен UIKeyboardWillHideNotification
, и приведенный выше оператор также будет правдой.
Использование этой информации было для меня достаточным для кодирования моего пользовательского интерфейса.
Примечание. Это может быть нарушение правил Apple, я не уверен.
Ответ 2
Это решение, которое работает с iPad-клавиатурами (первоначально из блога, связанного с комментарием Zeeshan)
[[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
}
}];
Ответ 3
Клавиша 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
, чтобы получать уведомления, когда расщепление клавиатуры.
Надеюсь, это поможет!
Ответ 4
Уведомления, которые публикуются, когда клавиатура появляется или меняет свое положение (UIKeyboardWillShowNotification
, UIKeyboardWillChangeFrameNotification
), содержат словарь userInfo
с фреймом клавиатуры (UIKeyboardFrameEndUserInfoKey
), который позволяет вам позиционировать элементы интерфейса правильно, в зависимости от фактического размера и расположения клавиатуры.