gpt4 book ai didi

objective-c - 在 NSButtonCell 上使用 NSBackgroundStyleLowered?

转载 作者:行者123 更新时间:2023-12-03 16:37:36 24 4
gpt4 key购买 nike

我使用这段代码...

[[textField cell] setBackgroundStyle:NSBackgroundStyleLowered];

...给一段文本添加阴影,并且它有效。当我尝试使用按钮执行相同的操作时:

[[refreshButton cell] setBackgroundStyle:NSBackgroundStyleLowered];

该代码不起作用。该按钮是一个带有白色透明圆形箭头的瞬时更改按钮。有什么想法为什么这行不通吗?看起来它会起作用,因为它仍然是一个细胞。

最佳答案

NSCell 子类具有不同的绘制行为。因此,可设置的背景样式并不意味着该样式实际上在具体子类中使用。

NSButtonCells 使用interiorBackgroundStyle绘制标题之前的属性。此属性不公开 setter ,因此您必须继承 NSButtonCell 并相应地在 Interface Builder 中设置单元格类。
要实现降低的背景样式,请在子类中重写 InteriorBackgroundStyle:

- (NSBackgroundStyle)interiorBackgroundStyle
{
return NSBackgroundStyleLowered;
}

如果您需要对绘图进行更多控制,您还可以覆盖 NSButtonCell 的 drawInteriorWithFrame:inView: .

一种黑客方法(不需要子类化)是修改属性标题字符串以达到类似的效果:

NSShadow* shadow = [[NSShadow alloc] init];
[shadow setShadowOffset:NSMakeSize(0,-1)];
[shadow setShadowColor:[NSColor whiteColor]];
[shadow setShadowBlurRadius:0];
NSAttributedString* title = [button.cell attributedTitle];
NSMutableDictionary* attributes = [[title attributesAtIndex:0 longestEffectiveRange:NULL inRange:NSMakeRange(0, title.length)] mutableCopy];
[attributes setObject:shadow forKey:NSShadowAttributeName];
NSAttributedString* string = [[NSAttributedString alloc] initWithString:[button.cell title] attributes:attributes];
[button.cell setAttributedTitle:string];

关于objective-c - 在 NSButtonCell 上使用 NSBackgroundStyleLowered?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15758656/

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