У меня есть NSTableView на основе представления с моим пользовательским представлением и нормальным NSTextField в нем. Цвет фона настраиваемого представления должен измениться, когда пользователь нажимает кнопку и не работает, потому что drawRect не вызывается. Я не понимаю, почему. Вот метод делегата и пользовательский код просмотра.drawRect не вызывается для представления ячейки NSTableView
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) DrawRect вызывается только при инициализации приложения. 2) Строка NSLog содержит новый/выбранный цвет, однако фон не изменяется от фиолетового.
Вопрос: почему не drawRect:
вызван после setNeedsDisplay:
?
. И вы определенно возвращаете свой подклассу 'NSTableCellView' в таблицу в соответствующих местах, то есть вы убедитесь, что то, что вы делаете в свой« MyCustomView »*, - это фактически упомянутый класс? – Jay
Спасибо за понимание. В представлении фактически был индекс 1 вместо 0. Вы можете опубликовать свой ответ. – Rabiees