Ho un problema in cui il mio UITapGestureRecognizer sul mio UILabels in una vista di contenuto nel mio UIScrollView non chiama i suoi metodi.UITapGestureRecognizer su UILabels nella sottoview di UIScrollView non funziona
La gerarchia della vista è la seguente:
- ScrollView (UIScrollView)
- contentView (UIView)
- testLabel (UILabel) - qui è dove è collegato l'UITapGestureRecognizer
- contentView (UIView)
ho distillato il codice verso il basso per un esempio per evidenziare il problema
// 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];
E questo è il metodo che il gesto riconoscitore rubinetto deve chiamare
- (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);
}
}
Questo metodo non viene mai chiamato quando ho ho provato a toccare UILabel.
Ho provato a impostare la proprietà canCancelContentTouches su SÌ e NO sulla vista di scorrimento come suggerito da questo thread, ma non funziona ancora.
La cosa strana è che se aggiungo un UILabel al di fuori di scrollView, il riconoscitore di gesti funziona! Quindi il problema si verifica solo nel mio contentView che è una sottoview del mio scrollView.
Sto usando il layout automatico, se questa potrebbe essere una differenza?
Grazie!
Provare a impostare [contentView setClipBounds: YES]; e vedere se il tuo 'Label' all'interno del' ContentView' è visibile, se non è il tuo 'Label' non è in contatto, aggiustare le proprietà di ridimensionamento .. – iphonic