Cocoa绑定和自定义NSCell属性

时间:2011-03-28 15:47:00

标签: cocoa cocoa-bindings nsarraycontroller nscell ibplugin

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

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

哪个类必须绑定到为数据提供服务的NSArrayController? 似乎细胞本身不能与任何东西绑定并做像

这样的事情
[self.subtitle bind:...]

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

Best,Stefan

1 个答案:

答案 0 :(得分:0)

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

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

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