2012-05-05 8 views
14

Schnelle Frage: Wie erkenne ich, ob sich eine TAP-Gestenerkennung in einer Unteransicht der Ansicht befindet, zu der sie hinzugefügt wurde? Z.B. Wenn ich auf ein Objekt wie ein Quadrat klicke, das als Unteransicht zu einem Hintergrund hinzugefügt wurde, zu dem ein TAPH-Gesture-Erkenner hinzugefügt wurde, wie erkenne ich, dass es angetippt wurde?So erkennen Sie eine Antippgeste in Unteransichten

+0

Bitte geben Sie klar, was Sie tun möchten? Möchten Sie den Klick auf Unteransicht erkennen? –

Antwort

37

Sie können den Punkt des Abzweigs vom Gestenerkenner entfernen, wenn Ihre Handlermethode für eine beliebige Ansicht mit -locationInView: aufgerufen wird. Verwenden Sie dann die folgende Methode für UIView: - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event, um einen Verweis auf die tatsächliche Unteransicht zu erhalten, die angetippt wurde, wobei Sie sich daran erinnern, dass sich der übergebene Punkt im selben Koordinatenraum wie die Ansicht befindet.

Einiger Code zum Einstieg:

CGPoint point = [tapGestureRecognizer locationInView:parentView]; 
UIView *tappedView = [parentView hitTest:point withEvent:nil]; 

Für Treffertests um die Ansicht zu arbeiten, um die userInteractionEnabled Eigenschaft auf YES gesetzt haben muss. In vielen Ansichten, z. B. UILabel, ist dies standardmäßig auf NO eingestellt. So vor der oben:

self.subviewOfInterest.userInteractionEnabled = YES; 
+0

Danke, das hilft viel! – Fitzy

+0

Danke @Brandom –

0

Sie die requireGestureRecognizerToFail: verwenden können, den Hahn auf subview zu erkennen siehe this Code

13

vielleicht sollten Sie festlegen, wie: subviews.userInteractionEnabled = YES; viel Glück!

+0

Verdammt! Das ist was ich brauchte. Meine Unteransicht wurde von GestenRecognizer ignoriert und jetzt funktioniert es. Vielen Dank. – surfrider