0

在 IB 中,将 2 个自定义视图放入一个窗口。我看不出有什么办法可以给他们单独的名字。在 Inspector-Info 中,我必须在下拉菜单中为它们使用相同的名称,即类名。我试过了

DrawRect:  NSRect bounds = [self bounds];       
[[NSColor greenColor] set]; 
[NSBezierPath fillRect:bounds];

它用绿色填充了两个自定义视图。但我想在每个自定义视图中独立地填充、绘制等。如何分别处理每个视图?多个自定义视图,稍后。还是 Cocoa 每个类只需要一个视图?

这可能是微不足道的,但谷歌和这里的类似问题列表并没有提出任何接近的结果。关于多个视图控制器有很多,但我不需要切换视图。

4

1 回答 1

3

IB 将向您显示您可以分配给对象的类的名称。如果您只有一个自定义类(例如“myCustomClass”),那么它只会在下拉菜单中显示该类。

如果您只想使用一个类,我认为解决您的问题的最佳方法是将绘图代码放在两个单独的函数中,并为每个视图分配一个 IBOutlet,然后从控制器类中调用该函数。

//Add this to your interface
NSNumber *myColor;

//Add/Edit the following functions
- (void)drawRect:(NSRect)aRect
{
    //Some code...
    if ([myColor intValue]) [self drawGreen];
    else [self drawRed];
    //Some code...
}

- (void)drawGreen
{
    NSRect bounds = [self bounds];       
    [[NSColor greenColor] set]; 
    [NSBezierPath fillRect:bounds];
}

- (void)drawRed
{
    NSRect bounds = [self bounds];       
    [[NSColor redColor] set]; 
    [NSBezierPath fillRect:bounds];
}

- (void)drawRedOrGreen:(int)aColor
{
    myColor = [NSNumber numberWithInt:aColor];
}

您必须将以下两行添加到控制器的界面

    IBOutlet myCustomClass *customView1;
    IBOutlet myCustomClass *customView2;

你必须设置每个视图的颜色。这将在第一次加载时设置它。

- (void)awakeFromNib
{
    [customView1 drawRedOrGreen:1]; //Green
    [customView2 drawRedOrGreen:0]; //Red
}

这样每个视图的颜色都会不同。

另一种解决方案是创建两个单独的自定义类(例如“myCustomClass1”和“myCustomClass2”),它们将具有自己的绘图代码......

于 2012-11-07T07:14:04.447 回答