0

我有一个名为“testClass”的自定义 NSView 类。我在我的主应用程序控制器类中创建了这个类的一个实例。testClass 包含一个 4 元素浮点数组作为实例变量,用于保存 NSView 的背景颜色。我想从主控制器类中设置这些值,然后 drawRect: 应该使用它们来绘制背景。但是,当我设置值时,drawRect 拒绝查看它们。它们始终为 0.0。

在 Interface Builder 中,我将自定义视图放在应用程序 MainMenu.xib 的主窗口中。然后我将它分配给 testClass。

这是我的代码:

@interface testClass : NSView
{
    @public
    float colors[4];
}
@end

@implementation testClass
-(void)drawRect:(NSRect)dirtyRect
{
    //The colors are ALWAYS 0.0, 0.0, 0.0:
    fprintf(stderr,"colors: %.2f %.2f %.2f\n",colors[0],colors[1],colors[2]);

    NSColor *c = [NSColor colorWithCalibratedRed:colors[0] green:colors[1] blue:colors[2] alpha:1.0];
    [c setFill];

    NSRectFill(dirtyRect);
}
@end

//Now, in the main app controller:
testClass *test = [[testClass alloc] init];
test->colors[0] = 1.00; //r
test->colors[1] = 0.75; //g
test->colors[2] = 0.25; //b
test->colors[3] = 1.00; //a

[test setNeedsDisplay:YES];

//This prints the colors as they should be:
fprintf(stderr,"colors: %.2f %.2f %.2f\n",
    test->colors[0],
    test->colors[1],
    test->colors[2]);

为什么即使我从创建自定义类的类中调用 setNeedsDisplay:YES,自定义视图也无法识别自己的变量?如果我试图做的事情不起作用,那么正确的方法是什么?

更新:

正如 user1118321 所指出的,我使用 [[testClass alloc] init] 行创建的 testClass 实例不是我应该做的。由于我已经在 Interface Builder 中以自定义视图的形式拥有了一个 testClass 实例(我为其分配了“testClass”),因此我只需要在主控制器类中创建一个指向它的指针作为 IBOutlet。一旦我这样做了,它就起作用了!

4

0 回答 0