2016-12-05 207 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來讓更多的物品只能進入兩個級別的彈((至少在他們修復之前)。 –

回答