我有一个基于视图的NSTableView,其中包含我的自定义视图和正常的NSTextField。当用户单击时,自定义视图的背景颜色应该会更改,但由于未调用drawRect,因此它不起作用。我不明白为什么。这是委托方法和自定义视图代码。
- (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:
?
答案 0 :(得分:0)
drawRect:
。是否有任何父视图/此视图有wantsLayer = YES
或已为其分配CALayer?在这种情况下,您将不得不使用updateLayer:
,因为图层支持视图的所有子项都会自动进行图层备份。