UITapGestureRecognizer auf UILabels in der Unteransicht von UIScrollView funktioniert nicht

Ich habe ein Problem, bei dem mein UITapGestureRecognizer auf meinen UILabels in einer Inhaltsansicht in meiner UIScrollView seine Methoden nicht aufruft.

Die Ansichtshierarchie lautet wie folgt:

scrollView (UIScrollView)contentView (UIView)testLabel (UILabel) - hier wird der UITapGestureRecognizer angehängt

Ich habe den Code auf ein Beispiel reduziert, um das Problem hervorzuheben

// Set scrollview size - Added in Storyboad
[scrollView setContentSize:CGSizeMake([arrayOfVerbs count]*self.view.frame.size.width, scrollView.contentSize.height)];
[scrollView setCanCancelContentTouches:YES]; // Tried both yes and no
[scrollView setPagingEnabled:YES];

// Add content view
UIView *contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, scrollView.contentSize.width, scrollView.contentSize.height)];
[scrollView addSubview:contentView];

// Add test UILabel
UILabel *testLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 100)];
[testLabel setBackgroundColor:[UIColor redColor]];
[testLabel setText:@"Test touch"];
[testLabel setUserInteractionEnabled:YES];
[contentView addSubview:testLabel];

// Add gesture recogniser
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(playSound:)];
singleTap.numberOfTapsRequired = 1;
[testLabel addGestureRecognizer:singleTap];

Und dies ist die Methode, die der Tap-Gesten-Erkenner aufrufen sollte

- (void)playSound:(UITapGestureRecognizer *)sender {

    NSLog(@"play sound");

    if(sender.state == UIGestureRecognizerStateEnded)
    {
        int pronounNumber = [sender.view tag];
        int exampleNumber = (int)sender.view.frame.origin.x%(int)self.view.frame.size.width;

        NSLog(@"Pronoun is %i and example is %i", pronounNumber, exampleNumber);
    }
}

Diese Methode wird nie aufgerufen, wenn ich versucht habe, das UILabel zu berühren.

Ich habe versucht, die Eigenschaft canCancelContentTouches in der Bildlaufansicht auf JA und NEIN zu setzen, wie dies vorgeschlagen wirdFaden, aber es funktioniert immer noch nicht.

Das seltsame ist, wenn ich ein UILabel außerhalb der scrollView hinzufüge, funktioniert der Gestenerkenner! Das Problem tritt also nur in meiner contentView auf, die eine Unteransicht meiner scrollView ist.

Ich verwende Auto-Layout, ob das ein Unterschied sein könnte?

Vielen Dank!

Antworten auf die Frage(3)

Ihre Antwort auf die Frage