在不同的类中设置Bool

时间:2012-04-04 03:22:37

标签: objective-c xcode cocoa

我有以下代码,其中bool为true后我想在我的rect中添加一个绘图。这是我的代码,但由于某种原因它要么不设置bool或调用setNeedsDisplay。我正确地引用了另一个班级吗?感谢

//在AppController.m中

-(IBAction)colorToggle:(id)sender
{
    if ([colorFilter state] == NSOnState) 
    {
        CutoutView *theView = [[CutoutView alloc] init];
        [theView setFilterEnabled:YES];

    }

}

//在cutoutView.m

- (void)drawRect:(NSRect)dirtyRect
{
    [[[NSColor blackColor]colorWithAlphaComponent:0.9]set];
    NSRectFill(dirtyRect); 

    //this is what i want to be drawn when my bool is true and update the drawRect        
    if (filterEnabled == YES) {
        NSRectFillUsingOperation(NSMakeRect(100, 100, 300, 300), NSCompositeClear);
        [self update];
    }
}

-(void)update
{
    [self setNeedsDisplay:YES];
}

2 个答案:

答案 0 :(得分:2)

好的,你知道每个UILabel都不一样吗?比如,您可以从视图中删除一个UILabel,而其他所有UILabel也不会消失吗?好吧,你的CutoutView也是一样的。当您在那里写CutoutView *theView = [[CutoutView alloc] init];时,会创建一个不会在任何地方显示的 CutoutView。您需要与现有的 CutoutView交谈(可能是通过连接插座,但有许多完全有效的设计可以实现这一目标。)

答案 1 :(得分:0)

您忘记调用drawRect:方法,它应如下所示:

CutoutView *theView = [[CutoutView alloc] init];
[theView setFilterEnabled:YES];
[theView setNeedsDisplay];

来自docs

  

当视图的实际内容发生变化时,它就是您的   有责任通知系统您的视图需要   重绘。您可以通过调用视图的setNeedsDisplay或来执行此操作   setNeedsDisplayInRect:视图的方法。