メッセージングを行うiPadのiMessageアプリに似たアプリを作成しています。そのため、キーボードが表示されているときは、メッセージビューと入力アクセサリビューの下部に固定された入力ビューがあります。また、ドッキングまたはドッキング解除中にキーボードが表示されている場合は、メッセージビューのサイズを適切に変更する必要があります。
私が抱えている問題は、UIKeyboardWillChangeFrameNotificationから受信する通知データに一貫性がないことです。
まず、ユーザーがキーボードをドッキング解除する方法は3つあります。
- 右下のキーを押したまま、上にスライドします
- 右下のキーを押したまま、メニューが表示されたら、[ドッキング解除]を選択します
- 右下のキーを押したままにして、メニューがポップアップしたら、「分割」を選択します
ケース#1の場合、UIKeyboardWillChangeFrameNotificationからの通知データは一貫しています。データは次のとおりです。
userInfo = {
UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 0}, {768, 304}}";
}
ケース#2と#3の場合、データに一貫性がありません。受け取ったものは次のとおりです。
userInfo = {
UIKeyboardAnimationCurveUserInfoKey = 0;
UIKeyboardAnimationDurationUserInfoKey = "0.25";
UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {768, 304}}";
UIKeyboardCenterBeginUserInfoKey = "NSPoint: {384, 872}";
UIKeyboardCenterEndUserInfoKey = "NSPoint: {384, 1136}";
UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 0}, {768, 304}}";
UIKeyboardFrameChangedByUserInteraction = 0;
UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, -264}, {768, 304}}";
}
ここで奇妙なのは、ケース#2または#3でUIKeyboardDidChangeFrameNotificationをリッスンすると、データが期待どおりに受信されることです。
userInfo = {
UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 0}, {768, 304}}";
}
通知データが異なるのはなぜですか?誰かが分割キーボードイベントを検出する明確な方法を見つけましたか?