Ich habe eine Ansicht-basierte NSTableView mit meiner benutzerdefinierten Ansicht und die normale NSTextField drin. Die Hintergrundfarbe der benutzerdefinierten Ansicht sollte sich ändern, wenn ein Benutzer klickt und es nicht funktioniert, da drawRect nicht aufgerufen wird. Ich verstehe nicht wirklich warum. Hier sehen Sie die Delegate-Methode und den Code für die benutzerdefinierte Ansicht.DrawRect wird nicht für NSTableView Zellenansicht aufgerufen
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];
}
Meine Ansicht
class MyCustomView: NSView {
var backgroundColor :NSColor = NSColor.purpleColor()
override func drawRect(dirtyRect: NSRect) {
NSLog("In here")
backgroundColor.setFill()
NSRectFill(dirtyRect)
}
}
Beobachtungen: 1) die drawRect nur auf init der App aufgerufen wird. 2) Die Zeile NSLog enthält die neue/ausgewählte Farbe, der Hintergrund ändert sich jedoch nicht von violett.
Frage: Warum wird drawRect:
nicht nach setNeedsDisplay:
aufgerufen?
.und Sie geben Ihre benutzerdefinierte 'NSTableCellView'-Unterklasse auf jeden Fall an die entsprechende Stelle in der Tabelle zurück, d. H., Sie haben sichergestellt, dass das, was Sie in Ihr 'MyCustomView' * umwandeln, tatsächlich diese Klasse ist? – Jay
Danke für diesen Einblick. Die Ansicht hatte tatsächlich den Index 1 statt 0. Sie können Ihre Antwort posten. – Rabiees