如何使用NSCollectionView
NSBox
更新以显示当前所选项目?在列表中显示选择似乎是一个基本的东西,但我遇到了各种各样的麻烦。
我已阅读此question并查看了Apple的sample code。似乎有几种方法可以做到这一点。
NSCollectionViewItem
的子类和特殊的“原型视图”。NSBox
。我希望使用NSBox
方式,因为它似乎很简单,也可以在官方代码示例中使用。
这显然是按照alternegro的以下引文所述完成的:
如果不同的背景颜色足以作为亮点,那么你可以 只需使用NSBox作为集合项视图的根项。 使用您选择的高亮颜色填充NSBox。设置NSBox 自定义所以填充将起作用。将NSBox设置为透明。
将NSBox的transparency属性绑定到所选属性 文件所有者(集合项)设置值的变换器 透明绑定到NSNegateBoolean。
我被困在第一部分:“使用NSBox作为你的根项目(原文如此)集合项目视图”。我试图将“自定义类”更改为继承自FoobarBox
的{{1}},但它似乎没有帮助,因为我无法将背景颜色更改为蓝色,也无法绑定透明度。任何关于如何在我的NSCollectionVuew中显示选择的指针都将不胜感激。
答案 0 :(得分:3)
首先,为继承自NSBox的ListView创建一个类
@interface MyListViewBox : NSBox
@property (unsafe_unretained) IBOutlet NSCollectionViewItem *controller;
@end
然后,在Interface Builder中,将您的类名指定为“Custom class”属性,如我的屏幕截图所示
然后你会发现IB没有在GUI中显示NSBox属性或绑定(至少在版本4.5.2中),所以我决定以编程方式更改属性。
使用IB将插座链接到NSCollectionItemView
in - (void)awakeFromNib为您的NSBox子类,添加以下代码
-(void)awakeFromNib {
//properties are not showing up in XCode Inspector IB view
//configuring the box here :-(
self.boxType = NSBoxCustom;
self.borderType = NSLineBorder;
self.fillColor = [NSColor selectedControlColor];
//bind the "transparent" property of NSBox to the "selected" property of NSCollectionViewItem controller
//controller is bound as IBOutlet in IB
NSValueTransformer* transformer = [NSValueTransformer valueTransformerForName:NSNegateBooleanTransformerName];
[self bind:@"transparent"
toObject:self.controller
withKeyPath:@"selected"
options:[NSDictionary dictionaryWithObjectsAndKeys:transformer, NSValueTransformerBindingOption, nil]];
}
答案 1 :(得分:1)
在XCode 4.5.2中,您只需删除NSColletionView自动附带的NSView并拖入NSBox(将具有所有适当的绑定)。确保将CollectionView重新绑定到新Box。