Пользовательские метки NSTableCellView не меняют цвет текста при выборе - программирование
Подтвердить что ты не робот

Пользовательские метки NSTableCellView не меняют цвет текста при выборе

У меня есть пользовательский NSTableCellView с 3 текстовыми полями 1, которые пришли и 2 других, которые я создал сам. Здесь проблема:
enter image description here

Цвет текста текстовых полей остается таким же, даже когда я нажимаю на строку. Я попытался реализовать код, который был обнаружен при помощи googling, но он не работает. Мой пользовательский код NSTableCellView:

- (void)drawRect:(NSRect)dirtyRect{
    NSColor *color = [NSColor colorWithCalibratedRed:(26/255.0) green:(26/255.0) blue:(26/255.0) alpha:1.0];
    [self.textField setTextColor:color];

    color = [NSColor colorWithCalibratedRed:(102/255.0) green:(102/255.0) blue:(102/255.0) alpha:1.0];
    [_lbl1 setTextColor:color];
    [_lbl2 setTextColor:color];
}

- (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle {
    NSColor *color = (backgroundStyle == NSBackgroundStyleDark) ? [NSColor windowBackgroundColor] : [NSColor controlShadowColor];
    self.textField.textColor = color;
    self.lbl1.textColor = color;
    self.lbl2.textColor = color;
    [super setBackgroundStyle:backgroundStyle];
}

Что я могу сделать, чтобы текст текста был белым, когда пользователь нажимает на них?

4b9b3361

Ответ 1

На самом деле, переопределение setBackgroundStyle на NSTableViewCell отлично работает для меня, по крайней мере, на OS X 10.8. Он обновляется по событиям выбора и активации/деактивации окна.

Здесь моя пользовательская ячейка - как тривиальная, как она может получить:

@implementation RuntimeInstanceCellView

- (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle {
    [super setBackgroundStyle:backgroundStyle];
    self.detailTextField.textColor = (backgroundStyle == NSBackgroundStyleLight ? [NSColor darkGrayColor] : [NSColor colorWithCalibratedWhite:0.85 alpha:1.0]);
//    self.detailTextField.textColor = (backgroundStyle == NSBackgroundStyleLight ? [NSColor blackColor] : [NSColor whiteColor]);
}

@end

Ответ 2

Развернувшись на принятом ответе, в Swift 2.0 процесс немного отличается. Переопределите свойство backgroundStyle вашего подкласса NSTableCellView, чтобы добавить наблюдателя свойств didSet :

class CustomTableCellView: NSTableCellView {

    @IBOutlet weak var detailTextField: NSTextField!

    override var backgroundStyle: NSBackgroundStyle {
        didSet {
            if self.backgroundStyle == .Light {
                self.detailTextField.textColor = NSColor.controlTextColor()
            } else if self.backgroundStyle == .Dark {
                self.detailTextField.textColor = NSColor.alternateSelectedControlTextColor()
            }
        }
    }

}

Ответ 3

В tableViewSelectionDidChange введите ячейку с помощью

UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; //replace UITableViewCell with your customCell class name if it other
//now as u got the instance of your cell u can modify the labels in it, like
cell.lable1.textColor = [UIColor whiteColor];

Это будет работать для вас.

У вас может возникнуть проблема, когда вы снова выберите другую ячейку после этого, в то время предыдущая ячейка может иметь все еще белые цветные ярлыки. Если это вызывает проблемы, у вас просто есть экземпляр NSIndexPath в вашем классе заголовка, который представляет предыдущий выбранный indexPath, с помощью которого вы можете вернуть цвета по умолчанию после выбора новой ячейки.