6

Ich habe einen NSAttributedString wie so:hinzufügen Tippgeste auf einen Teil eines UILabel

NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"testing it out @clickhere"]; 
NSInteger length = str.length; 
[str addAttribute:NSForegroundColorAttributeName value:[UIColor bestTextColor] range:NSMakeRange(0,length)]; 

Das NSMutableAttributedString auf eine UILabel gesetzt wird wie so:

label.attributedText = str; 

Wie mache ich einen Hahn Geste (oder etwas anklickbares) zu einem anderen Viewcontroller für die Wörter "@clickhere in der Zeichenkette oben?

Danke!

Antwort

5

Ich denke, fügen Sie der beste Weg, um die UIGestureRecognizer zu Ihrem UILabel ist das Hinzufügen und Validierung der Rahmen, den Sie möchten.

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
[_yourLabel addGestureRecognizer:singleTap]; 

- (void)handleTap:(UITapGestureRecognizer *)tapRecognizer 
{ 
    CGPoint touchPoint = [tapRecognizer locationInView: _yourLabel]; 

    //Modify the validFrame that you would like to enable the touch 
    //or get the frame from _yourLabel using the NSMutableAttributedString, if possible 
    CGRect validFrame = CGRectMake(0, 0, 300, 44); 

    if(YES == CGRectContainsPoint(validFrame, touchPoint) 
    { 
     //Handle here. 
    } 
} 
1

einfach zuerst eine Geste zu Ihrem Label

[label setUserInteractionEnabled:YES]; 
UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)]; 
[label addGestureRecognizer:gesture]; 

Kontrolle Ihres Gestenbereich in dem unten stehenden Verfahren

- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer 
{ 
    static CGRect touchableRect = CGRectMake(100.0f, 0.0f, 100.0f, 50.0f); // Give your rect as you need. 
    CGPoint touchPoint = [gestureRecognizer locationInView:self.view]; 
    if (CGRectContainsPoint(touchableRect, touchPoint)) 
    { 
     //User has tap on where you want. Do your other stuff here 
    } 
} 
0
UITapGestureRecognizer *Tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected)]; 
Tap.numberOfTapsRequired = 1; 
// label Name Is your Label Name 
[labelName addGestureRecognizer:Tap]; 
-(void)tapDetected 
    { 
    //your code 
    } 
0

würde Ich mag nur auf die Antwort von Ramshad hinzufügen, darüber, wie mit dem gültigen Rahmen zu behandeln.

Dazu sollten Sie UITextView anstelle von UILabel in Erwägung ziehen, was Ihnen keinen Zugriff auf die Verwaltung des Layouts des Textes gibt. Durch Deaktivierung von Bearbeitung, Auswahl und Scrollen verhält sich UITextView ungefähr genauso wie ein UILabel, außer dass einige Padding-Elemente entfernt werden müssen.

Der Einfachheit halber möchten Sie möglicherweise eine kleine Kategorie zu UITextView hinzufügen, in der Sie eine Methode schreiben, um zu testen, ob ein Punkt eines der Zeichen im Bereich berührt.

Dies würde auch für ein Textfragment funktionieren, das mehrere Wörter enthält, die sich aufgrund von Zeilenumbruch über mehrere Zeilen verteilen. Es würde auch bei lokalisierten Texten funktionieren, wenn wir mit Glyphen umgehen, die gedruckt werden.

+0

Hallo Li, haben Sie diesen Code getestet? – Zeb