1

我有一个NSArray习惯NSObjects。每个对象都有一些属性和我想在网格视图中显示的图像。NSMatrix 似乎是解决我的问题的好方法,但我在获取要显示的对象内容时遇到问题。

有几点需要注意。

  1. 我没有使用核心数据
  2. 我正在尝试以编程方式执行此操作
  3. 我考虑过使用NSCollectionView,但NSMatrix在这种情况下似乎是更好的解决方案
  4. 所有单元格都遵循相同的显示格式 - 即我不想传递不同的单元格不同类型的对象,只是传递对象的不同实例

假设我NSView在一个窗口中有一个 (matrixContainerView)。控制器文件有一个IBOutletto 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]];

但这只是创建了第一个对象图像。如果上述方法有效,那么枚举数组并添加对象将是一项简单的任务。

如何添加单元格并将适当的对象传递给这些单元格以便它们可以正确显示?

就编程指南而言,至少可以说 NSMatrix 上的Apple 文档很少。那里的信息对我非常有用,但只有在我添加了对象并让它们显示之后!

更新

如果我不添加这两个对象(根据我上面的示例),输出没有什么不同,即我的自定义单元格的单个表示被绘制到屏幕上。这告诉我,我看到的单一表示是在矩阵初始化时完成的,实际上我没有在第 0 列第 0 行绘制任何东西,而实际上我认为我是。这让我现在更加困惑。

4

1 回答 1

0

可能是矩阵实际上有两个单元格,但它的框架太小而无法显示它们?添加单元格后尝试调用[matrix sizeToCells]

于 2010-08-12T00:04:07.217 回答