2012-03-19 83 views
0

我在不同的xib上有两个类,一个具有窗口和滑块(控制器1),另一个具有窗口和视图(控制器2)。控制器1是第一个xib的文件所有者,控制器2是NSView的一个类。我想要做的是当我移动滑块时,我想改变NSRect的颜色。从另一个类中绘制矩形

在控制器1我有滑块动作:

-(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); 

} 

奇怪的是当我有我的行动和滑块在同一个xib作为我的看法与绘制矩形它工作得很好。然而,当我在另一个xib滑块,它不会工作。有任何想法吗?谢谢!

+0

在'moveSlider:'动作方法中,您每次都在创建'Controller2'。是否需要这种情况? – Ilanchezhian 2012-03-19 04:25:39

+0

以及我不相信它的要求,我导入该文件,但这只是我知道如何调用方法的唯一方法 – 2012-03-19 04:28:00

回答

1

在Controller1中,moveSlider:方法每次调用时都会创建一个Controller2的新实例。 Controller1需要保留对现有Controller2的引用,并在该实例上调用redraw方法。

+0

好吧,这绝对有道理,但我将如何编码?对不起,我是xcode的新手,从我抬头看我会需要一个代表或我该怎么做? – 2012-03-19 04:32:28

+0

究竟如何取决于您的应用程序。一种方法是将一个属性添加到'Controller2'类型的'Controller1'中,并使用任何对象创建'Controller2'来设置它。 – 2012-03-19 04:37:50