Ich erstelle eine App, die der iMessage App des iPads ähnlich ist, die Nachrichten versendet. Es gibt also eine Eingabeansicht, die am unteren Rand der Nachrichtenansicht verankert ist und die Zubehöransicht eingibt, wenn die Tastatur angezeigt wird. Außerdem muss die Nachrichtenansicht korrekt angepasst werden, wenn die Tastatur während des Andockens oder Abdockens angezeigt wird.
Das Problem, das ich habe, ist, dass die Benachrichtigungsdaten, die von UIKeyboardWillChangeFrameNotification kommen, nicht konsistent sind.
Erstens gibt es drei Möglichkeiten, wie der Benutzer die Tastatur abdocken kann:
Für Fall 1 sind die Benachrichtigungsdaten von UIKeyboardWillChangeFrameNotification konsistent. Hier sind die Daten:
%Vor%Für den Fall # 2 und # 3 sind die Daten inkonsistent, hier ist, was ich erhalte:
%Vor%Was ist seltsam hier ist, dass, wenn ich für UIKeyboardDidChangeFrameNotification in Fall # 2 oder # 3 zu hören, die Daten wie erwartet eintreffen:
%Vor%Warum unterscheiden sich die Benachrichtigungsdaten? Hat jemand einen klaren Weg gefunden, die Split-Keyboard-Ereignisse zu erkennen?
Keine klare Methode nicht.
Ich löse dieses Problem in den nächsten Schritten:
Ich aktualisiere meinen Text zum Beispiel. Mit der Methode convertRect.
Dies ist ein etwas hacky, aber zuverlässige Möglichkeit, um festzustellen, ob die Tastatur geteilt ist.
%Vor% Damit dies funktioniert, brauchen Sie natürlich eine UITextField / UITextView mit einem nicht-nil inputAccessoryView
(Sie können dafür einfach eine leere Ansicht verwenden).
Hinweis: Das Verhalten von textField.inputAccessoryView.superview
ist sehr heikel und hängt normalerweise davon ab, dass die Tastatur einmal aufgerufen wurde, bevor superview
aufgerufen wurde. Um den App Store-Übermittlungsprozess zu bestehen, habe ich das Präfix 'UI' aus den privaten Klassennamen entfernt. Das ist keine Garantie Apple wird Ihre App nicht kennzeichnen, aber dieser Ansatz wurde zuvor erfolgreich verwendet.
Ich habe es nur auf iOS7 getestet, aber wenn es bei anderen Versionen von iOS nicht funktioniert, könnten ähnliche Ansätze verwendet werden.
Tags und Links objective-c ipad keyboard-events