objective-c - 以编程方式将自定义对象数组传递给 NSMatrix 中的 NSCell

标签 objective-c cocoa subclass nscell nsmatrix

我有一个自定义 NSObjectsNSArray。每个对象都有一些属性和一个我想在 GridView 中显示的图像。 NSMatrix 似乎是解决我的问题的一个很好的解决方案,但我在获取要显示的对象的内容时遇到问题。

有几点需要注意。

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

假设我在窗口中有一个 NSView (matrixContainerView)。 Controller 文件有一个到matrixContainerView 的IBOutlet。在我的 Controller 中,我的 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 类 header 如下所示:

@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

在 Controller 中对包含 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 行绘制任何内容,而事实上我以为是这样。这让我现在更加困惑。

最佳答案

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

关于objective-c - 以编程方式将自定义对象数组传递给 NSMatrix 中的 NSCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3456474/

相关文章:

macos - Mac App Store 应用程序和标识符ForVendor

macos - Wunderlist 如何在窗口标题栏中创建搜索控件?

ios - 子类化 UITextField 并检测它何时成为或退出第一响应者

ios - 为所有 UIImageView 添加圆角

ios - 在 iOS 中将 3 条线动画化为 uibutton 的箭头

macos - NSScrollView,弹性和在 View 边界之外绘制

ios - 指向另一个类中的对象的指针?

macos - NSProgressIndicator 子类

ios - ipad-如何在 UITableViewCell 中打开弹出 View Controller

objective-c - Hook C 函数