我支持NSButton
图层,因为我想使用自定义图像,但这似乎在我需要以编程方式更改字体时禁止使用setFont:
方法,就像我注释掉wantsUpdateLayer:
和updateLayer:
的代码,setFont:
有效,但是当图层方法在代码中时,它什么都不做。
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
self.fontChangeButton = [[CustomButton alloc]initWithFrame:NSMakeRect(82, 60, 190, 113)];
[self.window.contentView addSubview:self.fontChangeButton];
}
- (IBAction)changeFont:(id)sender {
[self.fontChangeButton fontChange];
}
@end
@implementation CustomButton
- (void)fontChange{
[self setFont:[NSFont fontWithName:@"Dosis Bold" size:40]];
}
//when these are commented out, setFont: works, but I need them in for the custom button images
- (BOOL)wantsUpdateLayer{
return YES;
}
- (void)updateLayer{
if (self.state == NSOnState) {
self.layer.contents = [NSImage imageNamed:@"buttonPressed.png"];
}else
self.layer.contents = [NSImage imageNamed:@"buttonUnpressed.png"];
}
此主题提供了一种解决方法,但我更愿意理解为什么会发生这种情况并修复它:Can't Change NSButton Font
答案 0 :(得分:0)
通过重写-wantsUpdateLayer返回YES,您将绕过对-drawRect:的调用。该设施于10.8推出,用于提高效率。
我认为应该澄清两件事:
1 - 您无需覆盖-wantsUpdateLayer以进行图层备份。只需发送-setWantsLayer:YES即可为您的按钮提供图层支持。
2 - 在您的示例中,创建自定义NSButtonCell类可能是您尝试执行的更好的方法。看看Apple's documentation子类化NSControl和这个how to来开始。