如何使用NSTableView和NSTabView绑定不同的实体?

时间:2014-04-23 17:29:35

标签: objective-c nstableview cocoa-bindings nsarraycontroller nstabview

我有NSArrayController来处理GeometryShape的实体。 GeometryShape有:nametypecolorLineShapeGeometryShape,其中包含:beginPositionXbeginPositionYendPositionXendPositionYCircleShapeGeometryShape,其中包含:positionXpositionYradius

NSTableView显示NSArrayController中所有插入的形状,其中每列都与arrangedObjects&关键名称。

当我选择线形时,其属性显示在“线条”选项卡中 - 这是默认选项卡。

现在,如果我选择圆形,我希望选择圆形标签,并显示圆形属性。

...等等,根据我选择的形状类型,将选择相应的选项卡并显示相应的形状属性。

我怎样才能实现这个优秀的:)模型?

enter image description here

1 个答案:

答案 0 :(得分:0)

我认为您希望实现NSTableViewDelegate并以编程方式在tableViewSelectionDidChange:的实现中选择适当的选项卡。当选择更改时,您只需获取tabView的IBOutlet并根据arrayController的选择分配新的selectedIndex。

或者,您可以将tabView的selectedIndex的值绑定到数组控制器的选择,但是您需要一个自定义值转换器,它从选择id转换为反映适当类的NSUInteger

在任一实现中,您使用isKindOfClass编写代码并映射到整数。

您也可以将选项卡视图的selectedLabel绑定到selection.class的数组控制器关键路径,但我猜你仍然需要一个包含NSStringFromClass()的valuetransformer,如{{3}中所述}。我不完全确定有一种完全非代码方式可以将类转换为可以绑定selectedLabel的字符串。

就个人而言,我不喜欢实现自定义值转换器,因为您正在编写代码以允许实现隐藏在IB中的行为...所有这些都是为了避免编写可能存在于自定义tableview委托中的代码。