Автоматическое обнаружение ссылок не работает в NSTextView после программной настройки текста - PullRequest
9 голосов
/ 14 августа 2011

У меня NSTextView с включенным автоматическим определением ссылки. Когда я устанавливаю текст программно [myTextView setString:@"http://google.com"], он автоматически не показывает ссылку.

Если я введу что-либо в текстовое представление, он добавит ссылку. Я хочу добавить ссылку

Ответы [ 3 ]

12 голосов
/ 10 сентября 2014

Пришлось потратить некоторое время на поиск решения, но нигде не смог его найти.

Вам не нужны сторонние библиотеки. Какао сделает это за вас.

checkTextInDocument: работает только с редактируемыми текстовыми представлениями (Apple забыла об этом упомянуть). Вот код, который работает, если ваш NSTextView только для чтения:

[myTextView setEditable:YES];
[myTextView checkTextInDocument:nil];
[myTextView setEditable:NO];

Не забудьте проверить «умные ссылки» в вашем .xib файле

6 голосов
/ 17 августа 2011

Я закончил тем, что добавил категорию, которая сделает эту работу.Он использует несколько других категорий для поиска и форматирования ссылок.

Я написал в блоге об этом здесь .

Я также поместил пример проекта на GitHub.

5 голосов
/ 26 сентября 2012

Как отмечено в комментарии на сайте Рэндалла , существует простой способ сделать это в 10.6 или более поздней версии:

[self.textView checkTextInDocument:nil];

В зависимости от того, как настроено представление, этоможет сделать больше, чем просто добавить ссылки - например, это может добавить умные цитаты.Вы можете использовать setEnabledTextCheckingTypes:, чтобы указать, что вы хотите проверить.В моем случае я хочу, чтобы при наборе текста были включены интеллектуальные кавычки, но я не хочу, чтобы они добавлялись при программном изменении текста.Поэтому я могу использовать что-то вроде этого:

NSTextCheckingTypes oldTypes = self.textView.enabledTextCheckingTypes;
[self.textView setEnabledTextCheckingTypes:NSTextCheckingTypeLink];
[self.textView checkTextInDocument:nil];
[self.textView setEnabledTextCheckingTypes:oldTypes];

Это вернет поле к его предыдущему поведению после добавления ссылок.

...