我有NSArray
个自定义NSObjects
。每个对象都有一些属性和一个我想在网格视图中显示的图像。 NSMatrix似乎是我的问题的一个很好的解决方案,但我在获取要显示的对象的内容时遇到问题。
值得注意的事情。
NSCollectionView
,但在这种情况下,NSMatrix
似乎是更好的解决方案假设我在窗口中有NSView
(matrixContainerView)。控制器文件具有IBOutlet
到matrixContainerView。在我的控制器中,我在awakeFromNib中有以下内容:
NSMatrix* matrix = [[NSMatrix alloc]
initWithFrame:[matrixContainerView bounds]
mode:NSRadioModeMatrix
cellClass:[MyCustomCell class]
numberOfRows:5
numberOfColumns:5];
[matrix setCellSize:NSMakeSize(116, 96)];
[matrix setNeedsDisplay:YES];
[matrixContainerView addSubview:[matrix autorelease]];
[matrixContainerView setNeedsDisplay:YES];
类MyCustomCell
标题如下所示:
@interface MyCustomCell : NSCell {
MyModel * theObject;
}
-(MyModel *)theObject;
-(void)setTheObject:(MyModel *)newValue;
执行文件如下(简化图纸):
@implementation MyCustomCell
-(void)drawInteriorWithFrame:(NSRect)theFrame inView:(NSView *)theView {
...drawing code using MyModel e.g. [MyModel isValid] etc...
}
-(MyModel *)theObject {
return theObject;
}
-(void)setTheObject:(MyModel *)newValue {
[theObject autorelease];
theObject = [newValue retain];
}
@end
在控制器中包含MyModel
个对象的数组的初始化和填充之后,我想用NSMatrix
填充对象的实例。
我该怎么做?
我尝试过如下添加数组中的两个对象(就像测试一样):
MyCustomCell * cellOne = (MyCustomCell *)[matrix cellAtRow:0 column:0];
[cell setTheObject:[myArrayOfObjects objectAtIndex:0]];
MyCustomCell * cellTwo = (MyCustomCell *)[matrix cellAtRow:0 column:1];
[cellTwo setTheObject:[myArrayOfObjects objectAtIndex:1]];
但这只会创建第一个对象图像。如果上面的方法有效,那么枚举数组并添加对象将是一项简单的任务。
如何添加单元格并将相应的对象传递给这些单元格才能正确显示?
就编程指南而言,Apple docs在NSMatrix上至少可以说是稀疏的。那里的信息对我来说非常有用,但只有在我添加了对象并让它们显示之后才会显示出来!
像往常一样,所有人都非常感激。
更新
如果我不添加这两个对象(按照上面的例子),输出也没有什么不同,即我的自定义单元格的单个表示被绘制到屏幕上。这告诉我,我看到的单个表示是在矩阵的初始化时完成的,事实上我并没有向第0列第0行绘制任何东西,实际上我认为我是。这让我现在更加困惑。
答案 0 :(得分:0)
可能是矩阵实际上有两个单元格,但它的框架太小而无法显示它们?
添加单元格后,请尝试调用[matrix sizeToCells]