0

Manchmal wird die Selektormethode "tagClickAtIndex" nicht aufgerufen.iOS UITapGestureRecognizer funktioniert manchmal nicht

UILabel* label = [[UILabel alloc] init]; 
label.userInteractionEnabled = YES; 
UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tagClickAtIndex:)]; 
[label addGestureRecognizer:tapGesture]; 



-(void)tagClickAtIndex:(UITapGestureRecognizer*)gesture 
{ 
    NSMutableDictionary *mutDict = [[[NSMutableDictionary alloc]initWithDictionary:[_tagArray objectAtIndex:gesture.view.tag]] mutableCopy]; 
    [mutDict setValue:[NSNumber numberWithLong:gesture.view.tag] forKey:@"index"]; 
    [self.delegate tagClickAtIndex:mutDict]; 
} 
+0

Tushars überprüfen mein Ans wer.It funktioniert einwandfrei. – user3182143

Antwort

1

Sie den Grund, den Rahmen von label, es definiert nur den klickbaren Bereich

label.frame = CGRectMake(0,0,200,30) 
[yourMainview addSubView:label] 

und einstellen, wenn Sie

tapGesture.numberOfTapsRequired = 1; 
+0

möglicherweise diese Szenarien hilft Ihnen https://developers.google.com/maps/documentation/ioss-sdk/urlscheme –

0
müssen eingestellt vergessen

Wenn Sie programmatisch UILabel erstellen, Ihr vorstehender Code funktioniert nicht. Ich habe Ihren Code ausprobiert.

UILabel* label = [[UILabel alloc] init]; 
label.userInteractionEnabled = YES; 
UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tagClickAtIndex:)]; 
[label addGestureRecognizer:tapGesture]; 

Es zeigt nicht anything.As Sie nicht den Rahmen gesetzt haben und Label-Ansicht, es nicht zeigen.

Also dann habe ich versucht, UILabel frisch zu erstellen.Ich setze Frame, addSubView auf self.view und ich stelle die Farbe sowie Anzahl der Taps für Label.

UILabel* label = [[UILabel alloc] init]; 
label.frame = CGRectMake(30, 100, 200, 100); 
label.text = @"click me"; 
label.textColor = [UIColor blueColor]; 
[self.view addSubview:label]; 

Jetzt Gestenerkenner für Etiketten Tippen

UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tagClickAtIndex:)]; 
tapGesture.numberOfTapsRequired = 1; 
label.userInteractionEnabled = YES; 
[label addGestureRecognizer:tapGesture]; 

in Delegatmethode ich log setzen, ruft es jedes Mal, wenn ich das Etikett

-(void)tagClickAtIndex:(UITapGestureRecognizer*)gesture 
{ 
    NSLog(@"The tap is called"); 
    ......... 
} 

der gedruckten Aussagen berühren zeigt

The tap is called