3

我对子类 NSCell(复选框单元)有疑问。我希望他们在复选标记旁边有一个标题和一个副标题(所以我为这些创建了 NSString 属性)。它们的值应通过 Bindings 设置(来自 IB 会很棒)但问题来了:

IB 只允许我设置单元格的“值”,在我的情况下是复选标记状态的 BOOL。

什么类必须绑定到提供数据的 NSArrayController?似乎细胞本身不能绑定到任何东西并做类似的事情

[self.subtitle bind:...]

也不行。我必须在何时何地进行绑定?

最好的,斯特凡

4

1 回答 1

0

我将假设您在基于单元格的 NSTableView 中执行此操作,因为 NSButtonCell 确实公开了一个title绑定,但在 NSTableView 的上下文中它是无用的,因为您必须绑定 NSTableColumn,而这只公开了一个值绑定包含 NSButtonCells 的 NSTableColumns。这是框架的一个缺点,谷歌透露许多人都在努力解决这个问题。

一种方法是在您的-tableView:dataCellForTableColumn:row:-tableView:willDisplayCell:forTableColumn:row:委托方法中更新模型的标题。这样做的缺点是当底层模型发生变化时不会通过 KVO 进行更新。如果这对您的应用程序很重要,一种解决方法是使value复选框的模型 keyPath 依赖于复选框的模型 keyPath title。这样,当标题更改时,KVO 会发送值更改通知,这将导致重新绘制行,从而通过委托方法更新标题。

我注意到这个问题很老了,但现在更简单的方法是使用基于 NSView 的 NSTableViews。以这种方式完成后,您将使用一流的 NSButton 控件,同时提供 Value 和 Title 绑定(以及许多其他绑定)。假设您不担心支持 Lion 之前的操作系统版本,这通常是一种更可行的方法。

于 2012-12-05T03:33:56.843 回答