Может ли не редактируемый NSTextView выделять ссылки с помощью setAutomaticLinkDetectionEnabled?


Я использую NSTextView для отображения некоторого не редактируемого текста и хотел бы выделить любые ссылки в его строке. Я видел некоторый код, который анализирует ссылки и добавляет атрибуты. Это было бы прекрасно, но мне было интересно, смогу ли я каким-то образом повторно использовать встроенное обнаружение ссылок.

Я пробовал установить:

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

И использование:

[textView checkTextInDocument:nil];

После установки строки.

1 2

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.