鉴于我似乎每天都在讨论所有复杂的事情,这似乎是“我到底做错了什么,看起来很简单?” 设想!
我想继承 anNSTextField
来更改背景颜色和文本颜色。为简单起见(并帮助以前从未对任何东西进行子类化的任何人),这是我的(简化的)子类的示例MyNSTextFieldSubclass
...
第1步:
创建子类文件:
首先是头文件
@interface MyTextFieldSubclass : NSTextField {
}
@end
和方法文件
@implementation MyTextFieldSubclass
-(NSColor *)backgroundColor {
return [NSColor redColor];
}
-(NSColor *)textColor {
return [NSColor yellowColor];
}
@end
第2步:
在 Interface Builder 中拖动NSTextField
一个窗口,选择Identity
检查器中的选项卡并选择类MyTextFieldSubclass
第 3 步:
保存 IB 文件,构建并运行应用程序
问题
当我运行构建时,文本字段不反映颜色子类化。但是,我知道正在调用子类,因为如果我添加以下方法,它会在文本更改时被调用。
-(void)textDidChange:(NSNotification *)notification {
NSLog(@"My text changed");
}
那么为什么文本字段不会发生颜色变化呢?
我知道我可以在 IB 中设置颜色,但对于任何处理过大量UI 元素且都需要相同样式的人来说,子类化让生活变得更轻松。
具有讽刺意味的是,我以前从来没有对一个子类进行过分类NSTextField
,而这个让我很难过。
像往常一样,非常感谢任何和所有帮助。我敢肯定它会变成“Doh!” 时刻 - 现在只是看不到树木的树林(另外,我因为一大早看太多世界杯足球赛而筋疲力尽,这无济于事)。
=== 解决方案 ===
正如 Jaanus 所提供的,解决方案是将其放入viewWillDraw
方法中。因此我的(简化的)方法现在看起来像这样:
@implementation MyTextFieldSubclass
-(void)viewWillDraw {
[super setBackgroundColor:[NSColor redColor]];
[super setTextColor:[NSColor yellowColor]];
}
@end
谢谢大家帮助。