gpt4 book ai didi

objective-c - NSButton 不会设置字体 : when layer backed

转载 作者:行者123 更新时间:2023-12-03 17:22:00 24 4
gpt4 key购买 nike

我支持 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

最佳答案

通过重写 -wantsUpdateLayer 返回 YES,您将绕过对 -drawRect: 的调用。该功能是在 10.8 中引入的,其存在是为了提高效率。

我认为有两件事需要澄清:

1 - 您无需覆盖 -wantUpdateLayer 即可获得图层支持。只需将 -setWantsLayer:YES 发送到您的按钮即可进行图层支持。

2 - 在您的示例中,创建自定义 NSButtonCell 类可能是您想要执行的操作的更好方法。看看Apple's documentation关于 NSControl 的子类化和此 how to开始吧。

关于objective-c - NSButton 不会设置字体 : when layer backed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21583874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com