我遗漏了一些关于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
,但绘图仍会延迟。绘图会无限期延迟,除非有其他事情触发它。
答案 0 :(得分:0)
IBAction在哪里?你在使用一些视图控制器吗? NSView是该控制器中的插座吗?