我有一个带有标准NSWindow
的应用程序,其中包含一个NSToolbar
和几个NSToolbarItem
用作首选项。 NSToolbarItem
设置为可选,并使用包含的“模板”作为其名称的一部分来获得漂亮的系统渐变效果。
但是,选择NSToolbarItem
时,选择不会更改文本的背景。
每个NSToolbarItem
被标记为可选,而我的NSToolbarDelegate
仅实现以下两种方法:
-(NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar{
NSMutableSet *toolbarSet = [NSMutableSet set];
for (NSDictionary *prefItem in _preferenceItems){
[toolbarSet addObject:[prefItem objectForKey:@"toolbarIdentifier"]];
}
return [toolbarSet allObjects];
}
-(NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar{
NSMutableSet *selectableSet = [NSMutableSet set];
for (NSDictionary *prefItem in _preferenceItems){
[selectableSet addObject:[prefItem objectForKey:@"toolbarIdentifier"]];
}
return [selectableSet allObjects];
}
这就是我所看到的;注意文本周围的灰色框:
与Safari的“偏好设置”窗口相反:
我在Interface Builder中所有
NSToolbarItem
的配置:而
NSToolbar
本身: 最佳答案
作为我的NSToolbarDelegate / NSWindowController设置的一部分,我设置了:
[[[self window] contentView] setWantsLayer:YES];
评论此行解决了该问题。
在上下文中:
-(void)awakeFromNib{
NSDictionary *zendeskItem = @{@"name" : @"Zendesk Accounts",
@"toolbarIdentifier" : @"zendesk"};
NSDictionary *toolItem = @{@"name" : @"Tools",
@"toolbarIdentifier" : @"tools"};
NSDictionary *supportItem = @{@"name" : @"Support",
@"toolbarIdentifier" : @"support"};
NSDictionary *healthItem = @{@"name" : @"Health",
@"toolbarIdentifier" : @"health"};
NSDictionary *aboutItem = @{@"name" : @"About",
@"toolbarIdentifier" : @"about"};
_preferenceItems = [NSArray arrayWithObjects:zendeskItem, toolItem, supportItem, healthItem, aboutItem, nil];
[[self window] setContentSize:[_zendeskView frame].size];
[[[self window] contentView] addSubview:_zendeskView];
//[[[self window] contentView] setWantsLayer:YES];
currentViewTag = 1;
}