Пользовательский NSTextField в табличном представлении: как узнать, выбрана ли строка для изменения цвета фона? - PullRequest
1 голос
/ 18 января 2012

У меня есть NSTableView на основе представления с пользовательскими NSTextField экземплярами подкласса для рисования меток строк.

В зависимости от того, выделена ли строка (выделена), я хочу изменить цвет фона своего пользовательскоготекстовое поле.

Как узнать в drawRect:(NSRect)dirtyRect моего текстового поля, выбрана ли строка родительской таблицы?

Текстовое поле даже не знает, что оно является частью таблицыпредставление (и не должно).

Если я добавлю простой NSTextField в табличное представление, он автоматически изменит свой цвет шрифта на основе статуса выбора строки, так что это должно быть как-то возможно для текстового полячтобы узнать, выделен ли он / выделен или сейчас.

1 Ответ

0 голосов
/ 04 января 2016

Представление таблицы является родительским представлением представлений в представлении ячейки. Таким образом, вы можете перебрать иерархию представления в методе drawRect, чтобы найти представление родительской таблицы. И вместе с этим проверьте, выбрана ли строка, содержащая пользовательский NSTextField.

override public func drawRect(dirtyRect: NSRect) {
    var backgroundColor = NSColor.controlColor() //Replace by the non selected color
    var parentView = superview
    while parentView != nil {
        if let tableView = parentView as? NSTableView {
            let row = tableView.rowForView(self)
            if tableView.isRowSelected(row) {
                backgroundColor = NSColor.alternateSelectedControlColor() //Replace by the selected background color
            }
            break
        }
        parentView = parentView?.superview
    }
    //Perform the drawing with the backgroundColor
   // ...
}
...