NSCell 子类有不同的绘图行为。因此,可设置的背景样式并不意味着该样式实际用于具体子类中。
NSButtonCells在绘制标题之前使用 internalBackgroundStyle 属性。此属性不公开设置器,因此您必须继承 NSButtonCell 并相应地在 Interface Builder 中设置单元格类。
要实现降低的背景样式,请在您的子类中覆盖 internalBackgroundStyle:
- (NSBackgroundStyle)interiorBackgroundStyle
{
return NSBackgroundStyleLowered;
}
如果您需要对绘图进行更多控制,您还可以覆盖 NSButtonCell 的drawInteriorWithFrame:inView:。
一种 hacky 方法(不需要子类化)是修改属性标题字符串以达到类似的效果:
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];