2010-03-19 4 views
7

Titel mehr oder weniger sagt alles. Als Reaktion auf ein Ereignis touchesBegan umdefiniert sich meine UIViewController selbst und fügt einige Unteransichten hinzu.Keine Berührungen erhaltenEnded/Moved/Cancelled nach dem Hinzufügen von SubView

Es erhält nie die touchesEnded. Ich schätze, weil die hinzugefügten Subviews das Ereignis irgendwie abfangen. Ich habe versucht, resignFirstResponder auf den Unteransichten ohne Erfolg aufzurufen.

Der Code funktioniert einwandfrei, wenn ich die untergeordneten Ansichten nicht hinzufüge und die Berührungsereignisse wie normal aufgerufen werden.

Irgendwelche Ideen?

Dank

EDIT: Bit Detaillierungsgrad und wie ich es fixiert.

Grundsätzlich hatte ich eine Master-Ansicht mit einigen Unteransichten, als ich die Unteransicht berührte, wurde das Ereignis an die Master-Ansicht übergeben, jedoch entfernte ich an dieser Stelle die Unteransichten und fügte neue hinzu. Die Tatsache, dass die Berührung auf einer Unteransicht basierte, die nicht länger existierte, bedeutete, dass der Rest der Berührung verloren ging.

Ich reparierte diese durch zwingende hitTest: Withevent in meinem Masteransicht, berührt jemals zu stoppen gegen die Subviews testen zu lassen

+2

Beliebiger Code? +++++ – kennytm

+0

Hmmm, nun, der Code ist ziemlich komplex, aber ich habe das einfachste mögliche Beispiel geschrieben, um hier zu posten, und es hat gut funktioniert ... also +1 für den Anstupser in die richtige Richtung ...... ........ wird gepostet, wenn ich den Unterschied herausgefunden habe – Sam

Antwort

8

Haben Sie versucht, die userInteractionEnabled Eigenschaft zu setzen für das Subview auf NEIN, bevor sie als Subview hinzufügen?

+0

nein, das hört sich vielversprechend an, wir werden es versuchen ... – Sam

+0

Vielleicht haben einige Subview (s) dieses Event konsumiert, indem sie ein schlecht geformtes -touchesEnded: withEvent implementiert haben? – ZhangChn

1

Sie gehen die Berührung von der Subview auf die Superview mit so etwas wie dies passieren zu müssen:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

    [super touchesBegan:touches withEvent:event]; 
} 
+0

die Subviews erhalten das Event auch nicht. Wenn ich eine Unteransicht zu dem Ort hinzufüge, an dem das touchBegan-Ereignis aufgetreten ist, erhalten weder die Unteransicht noch die Superview touchesMoved/Cancelled/Ended. – Sam

+3

Dies übergibt die Berührung an die SuperCLASS, nicht an die SuperVIEW. ;) – Pascal

Verwandte Themen