我一直在使用NSTextView来显示一些不可编辑的文本,并希望突出显示其字符串中的任何链接。我见过一些解析链接并添加属性的代码。这样可以正常工作,但我想知道我是否能以某种方式重复使用内置链接检测。
我尝试过设置:
[textView setEnabledTextCheckingTypes:NSTextCheckingTypeLink];
[textView setAutomaticLinkDetectionEnabled:YES];
并使用:
[textView checkTextInDocument:nil];
设置字符串后。
答案 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。希望这对以后的人有所帮助。