我有一个带有标准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;
}

08-16 13:14