0

我在窗口中有一个常规的 DocumentView 类。用户按下按钮后,我有以下代码:

- (void)handleButtonPress:(NSNotification *)note{
  // draw new graph view
  EDGraphView *graph = [[EDGraphView alloc] init];
  [self addSubview:graph];
  [self setNeedsDisplay:TRUE];

  NSLog(@"Button was pressed");
}

这会被正确调用,因为每次单击按钮时我都会得到输出“按钮被按下”。除此之外,视图下面的drawRect方法也会被调用。

- (void)drawRect:(NSRect)dirtyRect
{
  NSRect bounds = [self bounds];
  [[NSColor whiteColor] set];
  [NSBezierPath fillRect:bounds];

  for(EDGraphView *graph in [self subviews]){
    [graph setNeedsDisplay:TRUE];
    NSLog("calling set needs display on graph object!");
  }
}

但是,当我进入 EDGraphView 类并编辑drawRect方法时,如下所示

- (void)drawRect:(NSRect)dirtyRect
{
  NSLog(@"redrawing graph view.");
}

它永远不会被调用!我一定错过了关于整个setNeedsDisplaydrawRect过程的一些东西。

有什么建议么?

4

2 回答 2

0

嗨 Normaly 你不会调用 setneeddisplay 到 drawrect 中。

你试过(和超级)吗?:

- (void)drawRect:(NSRect)dirtyRect
{
    NSRect bounds = [self bounds];
   [[NSColor whiteColor] set];
   [NSBezierPath fillRect:bounds];
   [super drawRect:rect];

}
于 2012-07-22T20:25:53.667 回答
0

明白了...我需要对我的子视图进行以下初始化调用:

EDGraphView *graph = [[EDGraphView alloc] initWithFrame:bounds];

现在它调用 drawRect 方法!

于 2012-07-22T22:04:09.017 回答