我在cocoa应用程序中有一个NSCollectionView
。
我可以通过以下迂回方式获取有关集合视图中当前所选对象的信息:
NSIndexSet* index = [self.currentCollectionView selectionIndexes];
CardModel* card = [[self.currentCollectionView itemAtIndex:index.firstIndex] representedObject];
NSCollectionView
类是否有返回所选对象的方法?或者这是首选方式吗?
答案 0 :(得分:0)
如果您询问selectionIndexes
是否是访问NSCollectionView
选项的唯一方式,答案是肯定的。
答案 1 :(得分:0)
与NSTableView
不同,您没有代理/通知,可以通知您有关选择的信息。所以selectionIndexes
是要走的路。
我不确定您是否为阵列控制器设置了观察者。但是,您显示的代码仅用于检索所选对象。要获得有关对象选择的通知,您需要在阵列控制器上为关键路径selectionIndexes
添加观察者(或者在IB中设置)。
[myArrayController addObserver:self
forKeyPath:@"selectionIndexes"
options:NSKeyValueObservingOptionNew
context:nil];
-(void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change
context:(void *)context
{
if([keyPath isEqualTo:@"selectionIndexes"])
{
// This will be invoked whenever objects are selected in Collection View.
// Now collectionView selectionIndexes can be used to get the selected objects.
}
}
答案 2 :(得分:0)
一种方法是在xib中使用绑定。为要由集合中的视图表示的项设置NSArrayController。在xib中,在Collection View的Bindings Inspector中,将CollectionView的Content绑定到collectionViewArrayController.arrangedObjects
。同时将选择索引绑定到collectionViewArrayController.selectionIndexes
。现在,您可以在数组控制器中创建一个插座,例如在App Delegate中,然后访问那里的所选对象。
例如,声明selectedCard
属性,以及与collectionViewAC
相关联的collectionViewArrayController
出口属性。现在,您可以通过selectedObjects
获取所需的卡片项目。
- (id)selectedCard
{
id selectedCards = [collectionViewAC selectedObjects];
if ([selectedCards count]) {
return [selectedCards objectAtIndex:0];
}
return nil;
}
使用绑定可以保持所有观察和更新。