不可编辑的NSTextView是否可以使用setAutomaticLinkDetectionEnabled突出显示链接?

时间:2013-01-18 12:02:37

标签: cocoa url hyperlink nstextview

我一直在使用NSTextView来显示一些不可编辑的文本,并希望突出显示其字符串中的任何链接。我见过一些解析链接并添加属性的代码。这样可以正常工作,但我想知道我是否能以某种方式重复使用内置链接检测。

我尝试过设置:

[textView setEnabledTextCheckingTypes:NSTextCheckingTypeLink];
[textView setAutomaticLinkDetectionEnabled:YES];

并使用:

[textView checkTextInDocument:nil];
设置字符串后

2 个答案:

答案 0 :(得分:1)

为了完整起见,以下是我手动添加到NSTextView的链接:

- (void)highlightLinksInTextView:(NSTextView *)view {
  NSDataDetector *linkDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil];
  NSArray *matches = [linkDetector matchesInString:view.string options:0 range:NSMakeRange(0, view.string.length)];

  [view.textStorage beginEditing];

  for (NSTextCheckingResult *match in matches) {
    if (!match.URL) continue;

    NSDictionary *linkAttributes = @{
      NSLinkAttributeName: match.URL,
    };

    [view.textStorage addAttributes:linkAttributes range:match.range];
  }

  [view.textStorage endEditing];
}

不幸的是,每次设置NSTextView字符串时都必须调用它。

答案 1 :(得分:0)

我最近偶然发现了这个问题,并创建了一个NSTextView子类LinkDetectingTextView.swift。希望这对以后的人有所帮助。