Ped*_*ira 14 macos cocoa objective-c nstableview nstableviewcell
我有一个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];
}
Run Code Online (Sandbox Code Playgroud)
当用户点击标签时,我该怎么做才能使标签的文字颜色变白?
And*_*sov 17
实际上,在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
Run Code Online (Sandbox Code Playgroud)
扩展了已接受的答案,在Swift 2.0中,这个过程略有不同.覆盖子类的backgroundStyle属性NSTableCellView以添加didSet 属性observer:
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()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于 Swift 3 和 4(这有趣吗?):
\n\noverride var backgroundStyle: NSView.BackgroundStyle {\n didSet {\n if self.backgroundStyle == .light {\n self.detailTextField.textColor = NSColor.controlTextColor\n } else if self.backgroundStyle == .dark {\n self.detailTextField.textColor = NSColor.alternateSelectedControlTextColor\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
4191 次 |
| 最近记录: |