17

NSTableCellView私は3つのテキストフィールドを持つカスタムを持っています.1つは付属していて、2つは自分で作成しました. 問題は次のとおりです。
ここに画像の説明を入力

行をクリックしても、テキストフィールドのテキストの色は変わりません。グーグルで見つけたコードを実装しようとしましたが、うまくいきません。私のカスタム 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];
}

ユーザーがラベルをクリックしたときにラベルのテキストの色を白くするにはどうすればよいですか?

4

4 に答える 4

18

実際、NSTableViewCell で setBackgroundStyle をオーバーライドすると、少なくとも OS X 10.8 では完全に機能しました。選択イベントおよびウィンドウのアクティブ化/非アクティブ化で更新されます。

これが私のカスタム セル impl です。

@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
于 2013-05-20T05:52:46.027 に答える
13

受け入れられた回答を拡張すると、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()
            }
        }
    }

}
于 2015-10-08T09:04:34.430 に答える
4

Swift 3 & 4 の場合 (これは面白くありませんか?):

override var backgroundStyle: NSView.BackgroundStyle {
    didSet {
        if self.backgroundStyle == .light {
            self.detailTextField.textColor = NSColor.controlTextColor
        } else if self.backgroundStyle == .dark {
            self.detailTextField.textColor = NSColor.alternateSelectedControlTextColor
        }
    }
}
于 2018-03-08T17:05:50.807 に答える
-5

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 を表すヘッダー クラスにインスタンスがあるだけで、これを使用して、新しいセルを選択した後にデフォルトの色に戻すことができます。

于 2012-10-20T15:37:05.183 に答える