是否有一种方法可以将一个(id)表示的对象附加到控件的每个NSSegmentedCell部分



有一个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)ArrayNS(Mutable)Dictionary(索引的NSNumber作为键,如myDict[@(index)])来存储"表示"的对象。然后,您可以将此数组或字典指定为分割单元格的表示对象:

mySegmentedControl.cell.representedObject = representedArrayOrDict;

相关内容

  • 没有找到相关文章

最新更新