2016-05-02 3 views
0

У меня есть 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:?

+1

. И вы определенно возвращаете свой подклассу 'NSTableCellView' в таблицу в соответствующих местах, то есть вы убедитесь, что то, что вы делаете в свой« MyCustomView »*, - это фактически упомянутый класс? – Jay

+0

Спасибо за понимание. В представлении фактически был индекс 1 вместо 0. Вы можете опубликовать свой ответ. – Rabiees

ответ

0

drawRect: вызывается только в том случае, если вы не включили поддержку слоя. Есть ли у какого-либо из родительских представлений/этого представления wantsLayer = YES или у него есть CALayer? В этом случае вам нужно будет использовать updateLayer:, поскольку все дочерние элементы с поддержкой слоя поддерживаются с помощью слоя.

+0

См. Мой комментарий выше. – Rabiees

Смежные вопросы