我有一个名为“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。一旦我这样做了,它就起作用了!