通过单击Uitextview或UILabel中的某个单词来执行操作

当用户点击Uitextview(或UIlabel)中的一些格式化/特定的单词时,如何执行某些特定的操作(如显示模式或推送控制器)? 我听说过NSAttributedString,但我不知道如何做到这一点。

我想要的是与facebook应用程序相同的结果。 当你点击一个名字时,它会推送另一个控制器:

脸书的例子

如果你能给我一些提示,教程或任何你想要的。

添加手势识别器到你的UITextView:

//bind gesture [_yourTextView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:delegate action:@selector(didReceiveGestureOnText:)]]; 

然后用下面的代码检查在didReceiveGestureOnText中点击哪个单词:

 +(NSString*)getPressedWordWithRecognizer:(UIGestureRecognizer*)recognizer { //get view UITextView *textView = (UITextView *)recognizer.view; //get location CGPoint location = [recognizer locationInView:textView]; UITextPosition *tapPosition = [textView closestPositionToPoint:location]; UITextRange *textRange = [textView.tokenizer rangeEnclosingPosition:tapPosition withGranularity:UITextGranularityWord inDirection:UITextLayoutDirectionRight]; //return string return [textView textInRange:textRange]; } 

编辑

这就是你的didReceiveGestureOnText方法应该如何看起来像:

 -(void)didReceiveGestureOnText:(UITapGestureRecognizer*)recognizer { //check if this is actual user NSString* pressedWord = [delegate getPressedWordWithRecognizer:recognizer]; } 

然而,这将导致你检查string毕竟是非常酷的(因为它很慢)。

这很冒险,但是你可以尝试使用TTTAttributedLabel,并在标签中附加一个自定义的URL:

  TTTAttributedLabel *label; //after setting the label text: [label addLinkToURL:[NSURL URLWithString:@"http://www.stackoverflow.com"] withRange:[label.text rangeOfString:@"CLICKABLE TEXT HERE"]]; 

然后在委托方法中,您调用您select的操作:

 #pragma mark - TTTAttributedLabelDelegate - (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url { // for handling the URL but we just call our action [self userHasClickedTextInLabel]; } 

您可以添加一个手势识别器到标签。 例如:

 [yourLabel setUserInteractionEnabled:YES]; UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelButton:)]; [tapGestureRecognizer setNumberOfTapsRequired:1]; [yourLabel addGestureRecognizer:tapGestureRecognizer]; [tapGestureRecognizer release]; 

你没有指定你正在使用的版本,或者是否通过IB或编程。 这会在您的标签上设置手势识别器。 select器是你想要执行的动作,例如执行Segue等。让我知道这是怎么回事