hitTest wird ausgelöst, wenn UIKeyboard angetippt wird

7

Ich versuche einen Fehler zu beheben, der UIView hitTest betrifft: withEvent: wird in meiner Ansicht aufgerufen, wenn die Berührungen auf dem UIKeyboard sind, aber erst nachdem die App im Hintergrund war.

Es geschah in meiner App mit einer komplexen Ansichtshierarchie, also habe ich es in einer App mit nur zwei Ansichten reproduziert:

  • 1 UIView 768x1024 (Vollbild)
  • 1 UITextView 200x200 in der oberen Hälfte der Vollbildansicht

Das Verhalten ist wie folgt:

  • Durch Tippen auf die Textansicht wird die hitTest-Methode der Vollbildansicht ausgelöst, das Textfeld wird zum Ersthelfer und die Tastatur erscheint dann wie erwartet. Das Tippen auf die Tastatur funktioniert einwandfrei.
  • Nun verlasse die Tastatur.
  • Schicke die App an den Hintergrund.
  • Dann fahren Sie mit der App fort.
  • Machen Sie den textview first responder erneut. Hier ist das Problem, jetzt, wenn Tasten auf der Tastatur tippen, wird die hitTest-Methode der Vollbildansicht ausgelöst.

Ich sehe das auf einem iOS 5 iPad 2. Nur auf dem Gerät, niemals im Simulator. Irgendeine Idee, warum hitTesting auf diese Weise durcheinander gebracht werden könnte? Danke.

    
brianpartridge 09.11.2011, 23:05
quelle

4 Antworten

9

Habe das gleiche Problem hier. Es passiert NUR, wenn ich nach Hause komme und zur App zurückkehre. Passiert nicht im ersten frischen Lauf.

Und es ist auch mit iOS5 verbunden.

    
Colnaghi 11.11.2011, 19:38
quelle
10

Das oben beschriebene Problem scheint dadurch zu entstehen, dass das UI-Fenster der Tastatur in einem schlechten Zustand verharrt. Sicherzustellen, dass die versteckte Eigenschaft des Tastaturfensters auf YES gesetzt wird (selbst wenn es bereits JA ist) behebt das Problem für mich. Dies kann in Ihrer UIApplicationDelegate-Klasse erfolgen:

%Vor%

Der Klassenname des Tastaturfensters, zumindest in iOS 5 mit einer Standard-US-Tastatur, ist UITextEffectsWindow. Wie üblich ist es keine gute Idee, sich auf undokumentierte Klassennamen zu verlassen, aber im Falle eines OS-spezifischen Fehlers funktioniert es für meine Zwecke. Es könnte eine beliebige Anzahl von Fenstern, einschließlich der Root-Anwendungsfenster, Tastatur, Warnungen und andere Fenster, die Ihre App oder anderen Frameworks hinzugefügt haben, so seien Sie nicht zu unspezifischen.

    
ipaterson 12.01.2012 16:50
quelle
0

Ich habe das gleiche Problem, und meine Arbeit um zu UIKeyboardDidShowNotification und UIKeyboardDidHideNotification, berechnen Sie die Tastaturhöhe mit UIKeyboardFrameEndUserInfoKey, dann in meinem hitTest zu hören: withevent: Methode, die ich sehen würde, ob der Treffer auf der Tastatur „Zone“ war oder nicht.

    
Enzo Tran 05.01.2012 11:45
quelle
0

Um die Antwort von @ enzo-tran zu erweitern, habe ich folgendes getan: Ich habe meiner UIView-Unterklasse eine keyboardRect -Eigenschaft hinzugefügt, die für UIKeyboardDidShowNotification und UIKeyboardDidHideNotification registriert ist, und hinzugefügt:

%Vor%     
edsko 26.03.2012 15:34
quelle

Tags und Links