3

在过去的几天里,我一直在阅读并尝试在自定义绘制的 NSCell 中允许链接,但基本上没有任何可用的东西,每种方法总是存在问题。

有谁知道这样做的有效方法?

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

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

我试过使用 nsattributedstring 和 NSLinkAttributeName

我尝试拦截对单元格的所有点击,然后尝试将他们单击的位置与文本中链接的位置进行匹配,但这永远不会奏效。

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

谢谢,大卫

4

1 回答 1

-1

我还没有完全尝试过,但试一试:

首先,对于超链接,我在 NSAttributedString 上使用了一个类别,类似于 Apple 开发人员文档中的这篇文章。此处的示例为您提供了一个关于 NSAttributedString 'hyperlinkFromString: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 不允许我发布多个超链接)

希望这可以帮助。

于 2011-01-10T18:28:51.803 回答