2016-12-05 205 views
1

我试图做一个简单的NSTouchBar有3个级别的NSPopoverTouchBarItem,所以基本上它是这样的:NSTouchBar多层次NSPopoverTouchBarItem

touchbar 我有3 NSButton和1 NSPopoverTouchBarItem主要NSTouchbar其打开第二NSTouchbar

第二和1 NSPopoverTouchBarItem其打开第三NSTouchbar

问题是,当我尝试打开第三个NSTouchbar,好像第二个NSTouchbar被解雇了,有时并没有打开第三个。

此外,当打开第三个,当我们关闭,我们去的第一个NSTouchbar,而不是第二NSTouchbar

下面是代码,应该是简单,应该工作(我使用Xcode的触摸栏中模拟器

#import "Window.h" 

static NSTouchBarCustomizationIdentifier TouchBarCustomizationIdentifier = @"TouchBarCustomizationIdentifier"; 

static NSTouchBarItemIdentifier NSTouchBarItemIdentifier1     = @"NSTouchBarItemIdentifier1"; 
static NSTouchBarItemIdentifier NSTouchBarItemIdentifier2     = @"NSTouchBarItemIdentifier2"; 
static NSTouchBarItemIdentifier NSTouchBarItemIdentifier3     = @"NSTouchBarItemIdentifier3"; 
static NSTouchBarItemIdentifier NSTouchBarItemIdentifier4     = @"NSTouchBarItemIdentifier4"; 

static NSTouchBarItemIdentifier NSTouchBarItemIdentifier4_1     = @"NSTouchBarItemIdentifier4_1"; 
static NSTouchBarItemIdentifier NSTouchBarItemIdentifier4_2     = @"NSTouchBarItemIdentifier4_2"; 
static NSTouchBarItemIdentifier NSTouchBarItemIdentifier4_3     = @"NSTouchBarItemIdentifier4_3"; 

static NSTouchBarItemIdentifier NSTouchBarItemIdentifier4_3_1    = @"NSTouchBarItemIdentifier4_3_1"; 
static NSTouchBarItemIdentifier NSTouchBarItemIdentifier4_3_2    = @"NSTouchBarItemIdentifier4_3_2"; 

@implementation Window 

- (NSTouchBar*) makeTouchBar { 

    _touchBar1 = [[NSTouchBar alloc] init]; 
    [_touchBar1 setDelegate:self]; 
    [_touchBar1 setCustomizationIdentifier:TouchBarCustomizationIdentifier]; 

    [_touchBar1 setDefaultItemIdentifiers:@[ 
              NSTouchBarItemIdentifier1, 
              NSTouchBarItemIdentifier2, 
              NSTouchBarItemIdentifier3, 
              NSTouchBarItemIdentifier4, 
              ] 
    ]; 
    [_touchBar1 setCustomizationRequiredItemIdentifiers:@[ 
                  NSTouchBarItemIdentifier1, 
                  NSTouchBarItemIdentifier2, 
                  NSTouchBarItemIdentifier3, 
                  NSTouchBarItemIdentifier4, 
                  ] 
    ]; 

    return _touchBar1; 
} 

- (nullable NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier { 

    if ([identifier isEqual:NSTouchBarItemIdentifier1]) { 

     NSCustomTouchBarItem *customTouchBarItem = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; 
     [customTouchBarItem setView:[NSButton buttonWithTitle:@"IS TOUCH 1" target:self action:nil]]; 

     return customTouchBarItem; 

    } else if ([identifier isEqual:NSTouchBarItemIdentifier2]) { 

     NSCustomTouchBarItem *customTouchBarItem = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; 

     [customTouchBarItem setView:[NSButton buttonWithTitle:@"IS TOUCH1" target:self action:nil]]; 

     return customTouchBarItem; 

    } else if ([identifier isEqual:NSTouchBarItemIdentifier3]) { 

     NSCustomTouchBarItem *customTouchBarItem = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; 

     [customTouchBarItem setView:[NSButton buttonWithTitle:@"IS TOUCH1" target:self action:nil]]; 

     return customTouchBarItem; 

    } else if ([identifier isEqual:NSTouchBarItemIdentifier4]) { 

     NSPopoverTouchBarItem *customTouchBarItem = [[NSPopoverTouchBarItem alloc] initWithIdentifier:identifier]; 
     [customTouchBarItem setCollapsedRepresentationLabel:@"OPEN TOUCH 2"]; 

     _touchBar2 = [[NSTouchBar alloc] init]; 
     [_touchBar2 setDelegate:self]; 
     [_touchBar2 setCustomizationIdentifier:TouchBarCustomizationIdentifier]; 

     [_touchBar2 setDefaultItemIdentifiers:@[ 
               NSTouchBarItemIdentifier4_1, 
               NSTouchBarItemIdentifier4_2, 
               NSTouchBarItemIdentifier4_3, 
               ] 
     ]; 
     [_touchBar2 setCustomizationRequiredItemIdentifiers:@[ 
                   NSTouchBarItemIdentifier4_1, 
                   NSTouchBarItemIdentifier4_2, 
                   NSTouchBarItemIdentifier4_3, 
                   ] 
     ]; 

     [customTouchBarItem setPopoverTouchBar:_touchBar2]; 

     return customTouchBarItem; 

    } else if ([identifier isEqual:NSTouchBarItemIdentifier4_1]) { 

     NSCustomTouchBarItem *customTouchBarItem = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; 

     [customTouchBarItem setView:[NSButton buttonWithTitle:@"IS TOUCH 2" target:self action:nil]]; 

     return customTouchBarItem; 

    } else if ([identifier isEqual:NSTouchBarItemIdentifier4_2]) { 

     NSCustomTouchBarItem *customTouchBarItem = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; 

     [customTouchBarItem setView:[NSButton buttonWithTitle:@"IS TOUCH 2" target:self action:nil]]; 

     return customTouchBarItem; 

    } else if ([identifier isEqual:NSTouchBarItemIdentifier4_3]) { 

     NSPopoverTouchBarItem *customTouchBarItem = [[NSPopoverTouchBarItem alloc] initWithIdentifier:identifier]; 
     [customTouchBarItem setCollapsedRepresentationLabel:@"OPEN TOUCH 3"]; 

     _touchBar3 = [[NSTouchBar alloc] init]; 
     [_touchBar3 setDelegate:self]; 
     [_touchBar3 setCustomizationIdentifier:TouchBarCustomizationIdentifier]; 

     [_touchBar3 setDefaultItemIdentifiers:@[ 
               NSTouchBarItemIdentifier4_3_1, 
               NSTouchBarItemIdentifier4_3_2, 
               ] 
     ]; 
     [_touchBar3 setCustomizationRequiredItemIdentifiers:@[ 
                   NSTouchBarItemIdentifier4_3_1, 
                   NSTouchBarItemIdentifier4_3_2, 
                   ] 
     ]; 

     [customTouchBarItem setPopoverTouchBar:_touchBar3]; 


     return customTouchBarItem; 

    } else if ([identifier isEqual:NSTouchBarItemIdentifier4_3_1]) { 

     NSCustomTouchBarItem *customTouchBarItem = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; 

     [customTouchBarItem setView:[NSButton buttonWithTitle:@"IS TOUCH 3" target:self action:nil]]; 

     return customTouchBarItem; 

    } else if ([identifier isEqual:NSTouchBarItemIdentifier4_3_2]) { 

     NSCustomTouchBarItem *customTouchBarItem = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier]; 

     [customTouchBarItem setView:[NSButton buttonWithTitle:@"IS TOUCH 3" target:self action:nil]]; 

     return customTouchBarItem; 

    } 

    return nil; 
} 

@end 
+0

这看起来像苹果的SDK的错误。另一个原因是,我无法找到任何像您尝试实现的具有两种弹出级别的系统触摸条。我的建议是使用像Apple [NSTouchBar目录](https://developer.apple.com/library/content/samplecode/NSTouchBarCatalog/Introduction/Intro.html#//apple_ref/doc/uid/TP40017550)中的Scrubber来让更多的物品只能进入两个级别的弹((至少在他们修复之前)。 –

回答