Gibt es eine Möglichkeit, Berührungen durch das iPhone zu übertragen?

Ich habe mehrere UIButton denen ich die aktuelle Aktion beim Tippen im Hauptbereich festlegen kann. Ich möchte dem Benutzer auch erlauben, von der Schaltfläche direkt in den Hauptbereich zu ziehen und die gleiche Aktion auszuführen; Im Wesentlichen sollten die touchesBegan und touchesMoved beim Berühren der UIB-Tasten an die Hauptansicht übergeben werden, aber auch die Taste drücken.

Gerade jetzt, ich habe die Touch-Up in der Änderung der Kontrolle. Der Zieh-Exit ruft den Bereich zum Aufbessern von Innen auf, um das Steuerelement festzulegen, und ruft dann den Abschnitt “Berührungen begonnen” auf, um den Vorgang zum Berühren des Hauptbereichs zu starten.

An dieser Stelle werden die touchesMoved und touchesEnded jedoch offensichtlich nicht aufgerufen, da die Berührungen auf der UIB-Taste entstanden sind.

Gibt es eine Möglichkeit, die Berührungen zu ignorieren, sodass sie an den Hauptbereich weitergegeben werden, aber auch, dass ich das Steuerelement zuerst einstellen kann?

Solutions Collecting From Web of "Gibt es eine Möglichkeit, Berührungen durch das iPhone zu übertragen?"

Suchen Sie in der Dokumentation nach Responder-Objekten und der Responder-Kette

Sie können Berührungen zwischen Objekten teilen, indem Sie die Nachbesserung an die Responder-Kette weiterleiten. Ihr UIButton hat einen Responder / Controller, der die UITouch-Ereignisse empfängt. Ich schätze, sobald er seine Interpretation der Nachricht, die er zurückgibt, ausgeführt hat, wurde die Berührung behandelt und entsorgt.

Apple schlägt so etwas vor (basierend auf der Art der Berührung natürlich):

[self.nextResponder touchesBegan:touches withEvent:event];

Anstatt das Berührungsereignis zu vercasting, wird es weitergegeben.

Unterklassierte UIButton:

MeinButton.h

 #import  @interface MyButton : UIButton { } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event ; @end 

MeinButton.m

 #import "MyButton.h" @implementation MyButton - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { printf("MyButton touch Began\n"); [self.nextResponder touchesBegan:touches withEvent:event]; } @end 

Ich weiß, diese Frage ist zwei Jahre alt (und bereits beantwortet), aber trotzdem …

Als ich das selbst probierte, wurden die Berührungen weitergeleitet, aber die Tasten verhielten sich nicht mehr wie Tasten. Ich habe auch die Berührungen zu “super” weitergegeben und nun ist alles in Ordnung.

Also für Anfänger, die darüber stolpern könnten, sollte der Code so aussehen:

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesBegan:touches withEvent:event]; [self.nextResponder touchesBegan:touches withEvent:event]; } 

Keine Unterklasse notwendig! Halten Sie dies einfach an den Anfang Ihrer Implementierung vor allem anderen:

 #pragma mark PassTouch @interface UIButton (PassTouch) @end @implementation UIButton (PassTouch) - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesBegan:touches withEvent:event]; [self.nextResponder touchesBegan:touches withEvent:event]; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesMoved:touches withEvent:event]; [self.nextResponder touchesMoved:touches withEvent:event]; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesEnded:touches withEvent:event]; [self.nextResponder touchesEnded:touches withEvent:event]; } - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesCancelled:touches withEvent:event]; [self.nextResponder touchesCancelled:touches withEvent:event]; } @end