Доступность NSToolbarItem в зависимости от версии OS X - PullRequest
1 голос
/ 17 июля 2011

У меня есть приложение, которое будет доступно в нескольких версиях OS X. Какой лучший способ сделать NSToolbarItem доступным для пользователей только в определенных версиях ОС. Когда он недоступен, он должен быть полностью скрыт, а не просто отключен.

Для упрощения, как программно удалить элемент панели инструментов из этого (ниже) меню?

Toolbar Customization

Редактировать: Я пытался переопределить toolbarAllowedItemIdentifiers: в делегате так:

- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar {
    NSLog(@"Toolbar requesting allowed items.");
    NSMutableArray *array = [NSMutableArray array];
    [array addObject:@"TPUpToolbarItem"];
    [array addObject:@"TPDownToolbarItem"];
    [array addObject:@"TPResetToolbarItem"];
    [array addObject:@"TPSpeedToolbarItem"];
    [array addObject:@"TPGroupToolbarItem"];
    [array addObject:@"TPBackgroundToolbarItem"];
    [array addObject:NSToolbarShowFontsItemIdentifier];
    if (floor(NSAppKitVersionNumber) <= 1038) {
        NSLog(@"Below Lion, adding Fullscreen item.");
        [array addObject:@"TPFSToolbarItem"];
    }
    [array addObject:@"TPFlipHToolbarItem"];
    [array addObject:@"TPFlipVToolbarItem"];
    [array addObject:NSToolbarFlexibleSpaceItemIdentifier];
    [array addObject:NSToolbarSpaceItemIdentifier];
    [array addObject:NSToolbarSeparatorItemIdentifier];
    [array addObject:NSToolbarShowColorsItemIdentifier];
    [array addObject:NSToolbarPrintItemIdentifier];
    return array;
}

Все остальные элементы панели инструментов отображаются в правильном порядке, однако полноэкранный элемент последний и остается там.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 18 июля 2011

Не забудьте -toolbarDefaultItemIdentifiers: в дополнение к -toolbarAllowedItemIdentifiers:. Попробуйте что-то вроде следующего:

enum {
    MDUndeterminedVersion    = 0,
    MDTiger                  = 0x1040,
    MDLeopard                = 0x1050,
    MDSnowLeopard            = 0x1060,
    MDLion                   = 0x1070,
    MDMountainLion           = 0x1080,
    MDMavericks              = 0x1090,
    MDUnknownVersion         = 0x1100 // ??
};

static SInt32 MDSystemVersion = MDUndeterminedVersion;

+ (void)initialize {
    if (MDSystemVersion == MDUndeterminedVersion) {
        SInt32 MDFullSystemVersion = 0;
        Gestalt(gestaltSystemVersion, &MDFullSystemVersion);
        MDSystemVersion = MDFullSystemVersion & 0xfffffff0;
    }
}

- (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar {
    NSLog(@"Toolbar requesting allowed items.");
    NSMutableArray *array = [NSMutableArray array];
    [array addObject:@"TPUpToolbarItem"];
    [array addObject:@"TPDownToolbarItem"];
    [array addObject:@"TPResetToolbarItem"];
    [array addObject:@"TPSpeedToolbarItem"];
    [array addObject:@"TPGroupToolbarItem"];
    [array addObject:@"TPBackgroundToolbarItem"];
    [array addObject:NSToolbarShowFontsItemIdentifier];
    if (MDSystemVersion < MDLion) {
        NSLog(@"Below Lion, adding Fullscreen item.");
        [array addObject:@"TPFSToolbarItem"];
    }
    [array addObject:@"TPFlipHToolbarItem"];
    [array addObject:@"TPFlipVToolbarItem"];
    [array addObject:NSToolbarFlexibleSpaceItemIdentifier];
    [array addObject:NSToolbarSpaceItemIdentifier];
    [array addObject:NSToolbarSeparatorItemIdentifier];
    [array addObject:NSToolbarShowColorsItemIdentifier];
    [array addObject:NSToolbarPrintItemIdentifier];
    return array;
}

-

- (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar {
    NSLog(@"Toolbar requesting default items.");
    NSMutableArray *array = [NSMutableArray array];
    [array addObject:@"TPUpToolbarItem"];
    [array addObject:@"TPDownToolbarItem"];
    [array addObject:@"TPResetToolbarItem"];
    [array addObject:@"TPSpeedToolbarItem"];
    [array addObject:@"TPGroupToolbarItem"];
    [array addObject:@"TPBackgroundToolbarItem"];
    [array addObject:NSToolbarShowFontsItemIdentifier];
    if (MDSystemVersion < MDLion) {
        NSLog(@"Below Lion, adding Fullscreen item.");
        [array addObject:@"TPFSToolbarItem"];
    }
    [array addObject:@"TPFlipHToolbarItem"];
    [array addObject:@"TPFlipVToolbarItem"];
    [array addObject:NSToolbarFlexibleSpaceItemIdentifier];
    [array addObject:NSToolbarSpaceItemIdentifier];
    [array addObject:NSToolbarSeparatorItemIdentifier];
    [array addObject:NSToolbarShowColorsItemIdentifier];
    [array addObject:NSToolbarPrintItemIdentifier];
    return array;
}

Обратите внимание, что если вы разрешили настройку пользователя для панели инструментов, вам может потребоваться удалить файл pref приложений, чтобы заметить изменение в настройке панели инструментов.

1 голос
/ 18 июля 2011

Использование Гештальт .

0 голосов
/ 18 июля 2011

@ NSGod был почти там. Хотя остальная часть его кода работает, похоже, что IB переопределяет мой код и все равно добавляет кнопку в полноэкранный режим. Мне пришлось переместить элемент панели инструментов из панели инструментов, а затем вручную указать на него NSToolbarDelegate, добавив этот метод: (up, down и т. Д. IBOutlet s)

- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag {
    if ([itemIdentifier isEqualToString:@"TPUpToolbarItem"]) {
        return up;
    }
    if ([itemIdentifier isEqualToString:@"TPDownToolbarItem"]) {
        return down;
    }

    if ([itemIdentifier isEqualToString:@"TPResetToolbarItem"]) {
        return reset;
    }
    if ([itemIdentifier isEqualToString:NSToolbarShowColorsItemIdentifier]) {
        return colors;
    }
    if ([itemIdentifier isEqualToString:NSToolbarShowFontsItemIdentifier]) {
        return fonts;
    }
    if ([itemIdentifier isEqualToString:NSToolbarPrintItemIdentifier]) {
        return print;
    }
    if ([itemIdentifier isEqualToString:@"TPSpeedToolbarItem"]) {
        return speed;
    }
    if ([itemIdentifier isEqualToString:@"TPBackgroundToolbarItem"]) {
        return background;
    }
    if ([itemIdentifier isEqualToString:@"TPGroupToolbarItem"]) {
        return group;
    }
    if ([itemIdentifier isEqualToString:NSToolbarFlexibleSpaceItemIdentifier]) {
        return flex;
    }
    if ([itemIdentifier isEqualToString:NSToolbarSpaceItemIdentifier]) {
        return space;
    }
    if ([itemIdentifier isEqualToString:@"TPFlipHToolbarItem"]) {
        return flipH;
    }
    if ([itemIdentifier isEqualToString:@"TPFlipVToolbarItem"]) {
        return flipV;
    }
    if ([itemIdentifier isEqualToString:NSToolbarSeparatorItemIdentifier]) {
        return sep;
    }
    if ([itemIdentifier isEqualToString:@"TPFSToolbarItem"]) {
        return fsItem;
    }
}
...