我觉得这是一项简单的任务,但我似乎无法使其发挥作用。 我正在尝试使用自定义项目的NSCollectionView。我在项目的自定义视图中添加了另一个NSImageView,并且我将此视图子类化,以便添加连接到此附加NSImageView的自定义插座。
现在我正在覆盖- (NSCollectionViewItem *)newItemForRepresentedObject:(id)object
,因为有时候我需要删除这个NSImageView。
- (NSCollectionViewItem *)newItemForRepresentedObject:(id)object {
CustomItem *theItem = (CustomItem *)[super newItemForRepresentedObject: object];
...
if (I need to remove that NSImageView) {
[[theItem additionalImageView] removeFromSuperview];
}
return theItem;
}
无论如何,additionalImageView似乎是(nil)
。这是显而易见的,因为super方法将返回没有自定义插座的默认NSCollectionViewItem。
这里最好的事情是什么?我读了一些关于copy
方法的内容,我尝试了:
- (NSCollectionViewItem *)newItemForRepresentedObject:(id)object {
CustomItem *theItem = [(CustomItem *)[super itemPrototype] copy]; // Here is the change
...
if (I need to remove that NSImageView) {
[[theItem additionalImageView] removeFromSuperview];
}
return theItem;
}
但这不会起作用。那么,是否有办法在使用自定义NSCollectionViewItem时保留自定义出口?
非常感谢任何帮助。谢谢!
答案 0 :(得分:1)
问题是没有人会实例化新项目的图像视图。复制将无效,因为您需要两个图像视图,而不是一个。
有两种方法可以解决这个问题:
不要调用newItemForRepresentedObject
的超类实现,而是使用NSNib
自己实例化项目(下面的工厂方法)。在方法调用中,您可以指定self
作为所有者,它将为您连接出口。然后设置representedObject
并摆弄图像视图。这是工厂方法的代码:
// Load item view from CustomItem.nib
// For consistent results, nib should contain exactly one NSCollectionViewItem.
- (NSCollectionViewItem *)newCollectionViewItem {
static NSNib *nib;
if (!nib) nib = [[NSNib alloc] initWithNibNamed:@"CustomItem" bundle:nil];
NSArray *nibObjects;
if (![nib instantiateNibWithOwner:self topLevelObjects:&nibObjects]) return nil;
for (id obj in nibObjects)
if ([obj isKindOfClass:[NSCollectionViewItem class]])
return (NSCollectionViewItem *)obj;
return nil;
}
致电[super newItemForRepresentedObject:]
后,请检查是否需要保持图片视图。如果这样做,请实例化新的NSImageView
,设置其属性,并将其添加到superview。最后一部分听起来很棘手。也许采用这种方法的人会提供一些代码。
答案 1 :(得分:1)
解决问题的一种方法是创建2个不同的原型视图并将它们绑定到控制器。现在,当您在newItemForRepresentedObject
时,您可以根据对象设置相应原型的副本(使用view
协议)设置NSCollectionViewItem
的{{1}}。我使用我从super获得的NSCoding
。
此处我显示字符串的casa示例代码或未知NSCollectionViewItem
的数字属性编辑器,NSManagedObject
是一个实用工具类,我将其用作集合视图的表示对象并保留信息关于属性/关系
NSManagedAttribute
它对我有用: - )