没有为NSTableView单元格视图

时间:2016-05-02 08:15:41

标签: cocoa nstableview nsview

我有一个基于视图的NSTableView,其中包含我的自定义视图和正常的NSTextField。当用户单击时,自定义视图的背景颜色应该会更改,但由于未调用drawRect,因此它不起作用。我不明白为什么。这是委托方法和自定义视图代码。

myController的

- (void)didAddLabel:(id)sender {
    CustomLabel *label = (CustomLabel *)sender;

    NSTableRowView *aaa = [_tableView rowViewAtRow:_tableView.selectedRow makeIfNecessary:NO];
    MyCustomView *hello = [((NSTableCellView*)[aaa viewAtColumn:0]).subviews objectAtIndex:0];

    [hello setBackgroundColor:[label nscolor]];
    NSLog(@"Background colour is %@", [hello backgroundColor]);
    [hello setNeedsDisplay:YES];
}

我的观点

class MyCustomView: NSView {

    var backgroundColor :NSColor  = NSColor.purpleColor()

    override func drawRect(dirtyRect: NSRect) {
        NSLog("In here")
        backgroundColor.setFill()
        NSRectFill(dirtyRect)
    }
}

观察:1)只在初始化app时调用drawRect。 2)NSLog行包含新的/选定的颜色,但背景不会从紫色变化。

问题:为什么drawRect:之后没有调用setNeedsDisplay:

1 个答案:

答案 0 :(得分:0)

仅当您未启用图层支持时才会调用

drawRect:。是否有任何父视图/此视图有wantsLayer = YES或已为其分配CALayer?在这种情况下,您将不得不使用updateLayer:,因为图层支持视图的所有子项都会自动进行图层备份。