我想在我的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”键的代表对象。

您是否尝试过超载复印件?

我猜想您的物品正在复制而不是直接启动。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top