我有基于NSDocument(NSPersistentDocument)的应用程序,在该应用程序中,我可以(通常)创建多个文档。

主文档窗口(基于NSPersistentDocument)具有添加的IB,工具栏。在代码中,我使用方法insertItemWithItemIdentifier- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag添加到工具栏项(NSToolbarItems)。

代码示例:

[_toolbar insertItemWithItemIdentifier:@"addTape" atIndex:2];




- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag {
    NSToolbarItem *item =nil;

    if ([itemIdentifier isEqual:@"addTape"]) {
        item = [[NSToolbarItem alloc] initWithItemIdentifier: itemIdentifier];
        item.label = NSLocalizedString(@"Add Tape",@"Add Tape");
        item.paletteLabel = NSLocalizedString(@"Add Tape",@"Add Tape");
        item.toolTip = NSLocalizedString(@"Adds new tape",@"Adds new tape");
        item.image = [NSImage imageNamed:@"NSAddTemplate"];
        item.target = self;
        item.action = @selector(addTape:);
        item.tag = 101;
    }
}


在我只打开一个文档之前,一切都是正确的。当我在第一个文档窗口上打开第二个文档(或创建新文档)时,工具栏上的项目会加倍(打开第三个文档后,第一个窗口上的项目会加倍,第二个上的项目会加倍,依此类推)。

编辑:我注意到,每次尝试添加工具栏项时,在每个窗口上都会调用itemForItemIdentifier。例如:如果我有两个窗口(两个打开的文档),并且在一个窗口上尝试添加一个按钮,则itemForItemIdentifier被调用两次。
对我来说很奇怪,因为每个文档都有自己的工具栏,而委托仅设置为此文档。

我不知道我做错了什么。也许有人会指出我做错了什么。

最佳答案

通常,您通常不会自己插入工具栏项目。实现委托方法toolbarAllowedItemIdentifiers:toolbarDefaultItemIdentifiers:,将根据这些列表初始化工具栏。

关于objective-c - 基于NSDocument的应用程序和NSToolbar,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11602200/

10-12 07:05