Window に通常の 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.");
}
呼び出されることはありません!setNeedsDisplayおよびdrawRectプロセス全体について何かが欠けているに違いありません。
助言がありますか?