1

我有一个应用程序可以在多个版本的 OS X 上NSToolbarItem使用。在某些 OS 版本中使用户只能使用的最佳方法是什么?当它不可用时,它应该完全隐藏,而不仅仅是禁用。

为简化起见,如何以编程方式从此(下方)菜单中删除工具栏项?

工具栏自定义

编辑:我试图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;
}

所有其他工具栏项目都以正确的顺序显示,但全屏项目在最后,并且仍然存在。

提前致谢。

4

3 回答 3

2

别忘-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;
}

请注意,如果您为工具栏设置了允许用户自定义设置,您可能需要删除应用程序首选项文件以注意到工具栏设置的更改。

于 2011-07-17T21:51:09.613 回答
1

使用完形

于 2011-07-17T20:08:31.103 回答
0

@NSGod 几乎就在那里。虽然他的其余代码有效,但似乎 IB 正在覆盖我的代码并添加全屏按钮。我必须将工具栏项移出工具栏,然后NSToolbarDelegate通过添加此方法手动指向它:(up,down等是IBOutlets)

- (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;
    }
}
于 2011-07-17T22:49:05.907 回答