IBAction不会触发NSView绘图

时间:2014-09-15 22:57:54

标签: cocoa

我遗漏了一些关于NSView的基本信息。我有一个Cocoa应用程序,其中一个名为DataSource的Objective C类只是一个常规类,它不在nib中。数据源有一个实例变量,一个NSColor *,它有一个getter和setter。

视图类在awakeFromNib

中实例化数据源
- (void)awakeFromNib{
    NSLog(@"awakeFromNib");
    ds = [[DataSource alloc] init];
}

然后在DataSource中查询要在drawRect中使用的颜色。它工作正常。我也实现了

- (void)mouseDown:(NSEvent *) anEvent;

在视图类中,更改DataSource的颜色,然后调用

[self setNeedsDisplay:YES];

并且当我点击自定义视图时它也可以正常工作。

但是如果我在笔尖中连接一个按钮,则在视图类中连接到这个IBAction:

- (IBAction)buttonPushed:(id) sender {
    NSLog(@"buttonPushed");
    [ds setData:[NSColor cyanColor]];
    [self setNeedsDisplay:YES];
}

数据源更新,但是从不调用drawRect,尽管setNeedsDisplay。在我更复杂的版本中,如果我在视图中单击(以不改变颜色的方式),我将获得更新(由按钮引起)。有些东西在推迟绘画。我该如何解决这个问题?

更新:没有控制器,也没有插座。 NSView子类包含buttonPushed。按下按钮后数据源会立即更新,但尽管从视图类调用了setNeedsDisplay:YES,但绘图仍会延迟。绘图会无限期延迟,除非有其他事情触发它。

1 个答案:

答案 0 :(得分:0)

IBAction在哪里?你在使用一些视图控制器吗? NSView是该控制器中的插座吗?