有一个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附加的representdobject。知道为什么吗?
selectedCell
继承自NSControl
。来自文档:
此方法的默认实现只是返回控件的关联单元格(如果没有设置单元格,则返回nil)。管理多个单元格的NSControl子类(如NSMatrix和NSForm)必须重写此方法以返回用户选择的单元格。
然而,NSSegmentedControl
不管理多个细胞,它只是整个控制的一个细胞。这就是为什么它的行为不像您想象的那样(对于NSSegmentedControl
,它总是返回控件的单元格,所以mySegmentedControl.selectedCell == mySegmentedControl.cell
)。
所以当你调用[[mySegmentedControl selectedCell] setRepresentedObject:myObject1];
时,你覆盖了之前设置的表示对象,因为你总是得到相同的单元格实例。
解决这个问题的一种方法是使用NS(Mutable)Array
或NS(Mutable)Dictionary
(索引的NSNumber
作为键,如myDict[@(index)]
)来存储"表示"的对象。然后,您可以将此数组或字典指定为分割单元格的表示对象:
mySegmentedControl.cell.representedObject = representedArrayOrDict;