0

IBでは、2つのカスタムビューを1つのウィンドウに配置します。それらに別々の名前を付ける方法がわかりません。Inspector-Infoでは、ドロップダウンメニューの両方に同じ名前(クラス名)を使用する必要がありました。私は試した

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

両方のカスタムビューを緑で塗りつぶしました。ただし、各カスタムビューで個別に塗りつぶしたり、描画したりしたいと思います。各ビューに個別に対処するにはどうすればよいですか?後で複数のカスタムビュー。または、Cocoaはクラスごとに1つのビューのみを必要としますか?

これはおそらく些細なことですが、Googleとここにある同様の質問リストは何も近いものを思いつきませんでした。複数のViewControllerについてはたくさんありますが、ビューを切り替える必要はありません。

4

1 に答える 1

3

IBは、オブジェクトに割り当てることができるクラスの名前を表示します。カスタムクラスが1つしかない場合(「myCustomClass」など)、ドロップダウンメニューにそのクラスのみが表示されます。

1つのクラスのみを使用する場合、問題の最善の解決策は、描画コードを2つの別々の関数に配置し、各ビューに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];
}

コントローラのインターフェイスに次の2行を追加する必要があります

    IBOutlet myCustomClass *customView1;
    IBOutlet myCustomClass *customView2;

また、各ビューの色を設定する必要があります。これにより、初めてロードするときに設定されます。

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

このようにして、各ビューの色が異なります。

別の解決策は、独自の描画コードを持つ2つの別個のカスタムクラス(「myCustomClass1」と「myCustomClass2」など)を作成することです。

于 2012-11-07T07:14:04.447 に答える