1

私はNSTouchBarの 3 つのレベルでシンプルにしようとしているNSPopoverTouchBarItemので、基本的には次のようになります。

タッチバー2番目を開くNSTouchbar3NSButtonと1 のメインがありますNSPopoverTouchBarItemNSTouchbar

3番目を開くNSTouchbar2NSButtonと1の2番目NSPopoverTouchBarItemNSTouchbar

問題は、3番目を開こうとするとNSTouchbar、2番目が却下されたように見え、3番目NSTouchbarが開かないことがあります。

また、3 つ目を開いたら、2 つ目ではNSTouchbarなく1 つ目に移動します。NSTouchbar

これがコードで、シンプルで動作するはずです(私はXcode TouchBar Simulatorを使用しています

#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
4

1 に答える 1