5

後で再利用できる便利なメソッドの配列を組み込んだ、というNSViewサブクラスを作成しました。DAViewこれはうまく機能しますが、 を使用するクラスやクラス自体でdrawRect:は決して呼び出されません。DAViewなんで?

これがどのようDAViewに見えるかです:

DAView

@interface DAView : NSView

- (id)initWithFrame:(NSRect)frame
{
    self = [super initWithFrame:frame];

    if (self)
    {
        self.backgroundColor = [NSColor clearColor];

        // Make layer-backed by default
        self.wantsLayer = YES;

        // Create a root layer
        CALayer *_rootLayer = [CALayer layer];

        _rootLayer.shouldRasterize = YES;

        _rootLayer.name = DAViewRootLayerDefaultName;

        self.layer = _rootLayer;
    }

    return self;
}

- (void)drawRect:(NSRect)dirtyRect // never called
{
    NSLog(@"Draw Rect called");
}

さて、この追加/メソッドを利用したい場合DAView's、同じ問題に直面します。の場合のように呼び出されることのないを除いてdrawRect:、すべて正常に動作します。DAView

DATableView

@interface DATableView : DAView

- (void)drawRect:(NSRect)dirtyRect // never called either
{
    [[NSColor grayColor] set];

    NSBezierPath *_cellSeparator = [NSBezierPath bezierPath];

    [_cellSeparator lineToPoint:dirtyRect.origin];

    [_cellSeparator closePath];

    [_cellSeparator stroke];

    NSLog(@"Draw rect");
}

ただしDATableView、 のヘッダーを のサブクラスに変更するとNSViewdrawRect:が呼び出されます。私は何が欠けていますか?

4

2 に答える 2