NSTableView NSCell中的链接

时间:2010-10-05 18:58:47

标签: cocoa nstableview nscell

我一直在阅读并尝试在过去几天内在自定义绘制的NSCell中允许链接,并且基本上没有任何用处,每种方法都存在问题。

有没有人知道这样做的方法有效吗?

我是自定义绘制NSCell使用 - (void)drawInteriorWithFrame:(NSRect)theCellFrame inView:(NSView *)theControlViewm

NSCell只是一个可变高度的文本块,里面有链接,有些单元格有链接,有些则没有链接。

我尝试将nsattributedstring与NSLinkAttributeName

一起使用

我已经尝试拦截所有点击到单元格,然后尝试匹配他们点击到文本中的链接所在的位置,但这种情况永远无法解决。

我基本上已经尝试了所有可以在所有主板上找到的建议,但大多数评论都是旧的,所以我希望有人找到了一个很好的方法来做到这一点。

谢谢大卫

1 个答案:

答案 0 :(得分:-1)

我没有尝试过这个,但试一试:

首先,对于超链接,我在NSAttributedString上使用了一个类别,类似于Apple开发人员文档中的这个post。这里的示例为您提供了一个NSAttributedString'的超链接.FromString:withURL:`

其次,为表创建一个委托,并实现tableView:willDisplayCell:forTableColumn:row:方法。

在那种方法中,

setAttributedStringValue:[NSAttributedString hyperlinkFromString:YOUR_STRING withURL:YOUR_URL]

或者,如果您还需要非超链接的字符串文本,

setAttributedStringValue:[SOME_NON_HYPERLINKED_STRING appendAttributedString:[NSAttributedString hyperlinkFromString:YOUR_STRING withURL:YOUR_URL]]

如果这是您自定义绘制NSCell的唯一原因,您可以尝试删除自定义类,因为这应该适用于NSTextFieldCell。我在网上看到,有些人在文本字段单元格中将属性字符串居中有问题,所以我希望它能正常工作。另一个警告:使用委托方法,请确保为所有条件设置要更改的单元属性。我引用:

  

因为aCell被重用于aTableColumn中的每一行,所以委托必须在绘制特殊单元格和绘制正常单元格时设置显示属性。

来自“http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSTableViewDelegate_Protocol/Reference/Reference.html”(抱歉,StackOverflow不允许我发布多个超链接)

希望这有帮助。