在以编程方式设置文本后,自动链接检测在NSTextView中不起作用

时间:2011-08-14 05:06:52

标签: cocoa macos nstextview

我有一个启用了自动链接检测的NSTextView。当我以编程方式[myTextView setString:@"http://google.com"]设置文本时,它不会自动显示链接。

如果我在文本视图中输入任何内容,它将添加链接。我希望它添加链接

3 个答案:

答案 0 :(得分:12)

不得不花一些时间寻找解决方案,但无法在任何地方找到它。

您不需要任何第三方库。可可会为你做。

checkTextInDocument:仅适用于可编辑的textViews(Apple忘记提及此内容)。 如果您的NSTextView是只读的,则代码可以正常运行:

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

不要忘记检查"智能链接"在.xib文件中

答案 1 :(得分:6)

我最后添加了一个可以完成这项工作的类别。它依赖于其他几个类别来查找和格式化链接。

我写了一篇关于它的博客文章here

我还在GitHub上添加了sample project

答案 2 :(得分:5)

a comment on Randall's site所述,有一种简单的方法可以在10.6或更高版本中执行此操作:

[self.textView checkTextInDocument:nil];

根据视图的设置方式,这可能不仅仅是添加链接 - 例如它可以添加智能引号。您可以使用setEnabledTextCheckingTypes:指定要检查的内容。在我的情况下,我希望在键入时启用智能引号,但是当我以编程方式更改文本时,我不希望它们被添加。所以我可以使用这样的东西:

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

在添加链接后,该字段将返回其先前的行为。