2012-03-19 16 views
0

私は異なるxibに2つのクラスを持ち、1つはウィンドウとスライダー(コントローラー1)を持ち、もう1つはウィンドウとビュー(コントローラー2)を持っています。コントローラ1は最初のxibのファイル所有者であり、コントローラ2はNSViewのクラスです。私がしたいのは、スライダーを動かしてNSRectの色を変えたいときです。コントローラ1では別のクラスのrectを描画する

は、私は私のスライダー作用を有する:

-(IBAction)moveSlider:(id)sender 
{ 
    Controller2 *view = [[Controller2 alloc] init]; 
    [view redraw]; 
} 

とコントローラ2に、私は自分のドローRECTと再描画するために私の方法を持っています。

- (id)initWithFrame:(NSRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     RectColor = [NSColor blackColor]; 
    } 

    return self; 
} 

-(void) redraw 
{ 
    NSLog(@"changed"); 
    RectColor = [NSColor blueColor]; 
    [self setNeedsDisplay:YES]; 
} 


- (void)drawRect:(NSRect)rect 
{ 
    [RectColor set]; 
    NSRectFill(rect); 

} 

それだけで正常に動作RECT私は引き分けと私の見解と同じXIB上の自分の行動とスライダーを持っていたときに奇妙なことがあります。しかし、私は他のxibのスライダーを持っているときは動作しません。何か案は?ありがとう!

+0

'moveSlider:'アクションメソッドでは、毎回 'Controller2'を作成しています。それが必要なのでしょうか? – Ilanchezhian

+0

よく、私はそのファイルをインポートする必要はないと信じていますが、これはメソッドを呼び出す方法を知っている唯一の方法でした。 –

答えて

1

Controller1では、moveSlider:メソッドは、呼び出されるたびにController2の新しいインスタンスを作成します。 Controller1は、既存のController2への参照を保持し、そのインスタンスに対してredrawメソッドを呼び出す必要があります。

+0

確かに意味がありますが、どうすればコード化できますか?申し訳ありませんが、私はxcodeを初めて使用しており、私が見たものから、私は代理人が必要でしょうか、それともどうすればいいのですか? –

+0

正確にはアプリケーションによって異なります。一つの方法は、 'Controller2'型の' Controller1'にプロパティを追加し、それを設定する 'Controller2'オブジェクトを作成することです。 –

関連する問題