1

有一个NSSegmentedControl,我正在尝试将不同的代表对象附加到每个NSSegmentedCell。我想我可能做错了什么,因为它似乎没有工作。

[mySegmentedControl setSelectedSegmented:0];
[mySegmentedControl selectedCell] setRepresentedObject:myObject0];

[mySegmentedControl setSelectedSegmented:1];
[mySegmentedControl selectedCell] setRepresentedObject:myObject1];

?

然后我认为它会很简单:

[mySegmentedControl setSelectedSegment:0];
myObjectType *type = (myObjectType *)[[mySegmentedControl selectedCell] representedObject];

似乎没有工作?我做错了什么吗?我的问题似乎是:

[[mySegmentedControl selectedCell] representedObject] 

似乎总是我附加的最新对象。因此,如果我选择段 0,它将返回我为段 1 附加的代表对象。任何想法为什么?

4

1 回答 1

0

selectedCell继承NSControl自。从文档中:

此方法的默认实现仅返回控件的关联单元格(如果未设置单元格,则返回 nil)。管理多个单元格的 NSControl 子类(例如 NSMatrix 和 NSForm)必须重写此方法以返回用户选择的单元格。

但是,NSSegmentedControl不管理多个单元格,它只是一个单元格用于整个控件。这就是为什么它的行为不像你想象的那样(因为NSSegmentedControl它总是返回控件的单元格,所以mySegmentedControl.selectedCell == mySegmentedControl.cell)。

因此,当您调用时,[[mySegmentedControl selectedCell] setRepresentedObject:myObject1];您将覆盖先前设置的表示对象,因为您始终获得相同的单元格实例。

解决此问题的一种方法是在存储“表示的”对象的位置使用NS(Mutable)Arrayor NS(Mutable)Dictionary(以NSNumber索引的 a 作为键,如)。myDict[@(index)]然后,您可以将此数组或字典分配为分段单元格的表示对象:

mySegmentedControl.cell.representedObject = representedArrayOrDict;
于 2014-08-18T15:32:31.233 回答