nScollectionViewItem中的自定义控件
-
01-10-2019 - |
题
我想在我的NscollectionViewItem的视图中放置一个自定义控件。
假设我有一个称为boxesview.boxesview的自定义nsview只是一个视图,它在其视图中绘制了预定数量的框。该数量的盒子是在Init方法中设置的。可以说我将其设置为8。
当我加载收集视图时,视图中的所有其他控件都可以正常工作(按钮,滑块等),但是我的视图不会绘制。
如果我在BoxEsesview的DrawRect方法中设置了一个断点,则表明要绘制的框数为0!如果我在INIT方法中设置了一个断点,将NUMBOXE设置为8,则表明Numbox确实确实设置为8。此外,即使集合视图中有多个行,INIT方法也只会被调用1次。
我究竟做错了什么?
更新
我能够通过将itemPrototype设置为从XIB加载而不是与NscollectionViewItem相同的XIB来实现此功能。这很棒,除了它仅适用于10.6而不是10.5。
更新2
我要做的是将我的自定义视图粘贴在已经存在的NscollectionViewItem的视图中。发生的事情是成员变量mboxwidth被吹走并且为零,因此当它绘制它时,什么也不会发生。
@implementation DumbView
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
mBoxWidth = 3;
}
return self;
}
- (void)drawRect:(NSRect)dirtyRect {
NSRect bounds = self.bounds;
[[NSColor redColor]set];
[NSBezierPath fillRect:NSMakeRect(bounds.origin.x, bounds.origin.y, mBoxWidth, mBoxWidth)];
}
@结尾
解决方案
我没有实现initwithCoder。这解决了一切。
其他提示
nScollectionViewItem使用原型视图,该视图已重复并为集合表示的对象中的每个项目进行连接。
你 可以 浏览所有麻烦,为您的自定义视图制作一个ibplugin(揭示了numberofboxestodraw绑定的一种),但这是屁股的痛苦,有一个简单的方法:手动绑定。
使用NscollectionView/Item的手动绑定
首先,subclcass nscollectionViewItem,告诉IB使用此新子类,并确保您中有一个连接到自定义视图的插座(如BoxView)。
接下来,子类NscollectionView(设置IB用于使用此子类)和覆盖 -newitemforrepresentedObject:. 。在其中,您将首先调用Super(将结果存储到本地变量),然后手动将您的“ BoxView”的Box数量绑定到您在模型中使用的“ numberOfboxes”键的代表对象。
您是否尝试过超载复印件?
我猜想您的物品正在复制而不是直接启动。