基于NSDocument的应用程序和NSToolbar



我有一个基于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被调用两次
这对我来说很奇怪,因为每个文档都有自己的工具栏,并且只为该文档设置了委托。

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

您通常不会自己插入工具栏项;实现委托方法CCD_ 5和CCD_。

我找到了解决方案:我不能使用从nib创建的tooolbar,因为每个创建的这个方法工具栏都有相同的标识符。当我使用不同的标识符在代码中创建工具栏时,问题已经解决了。

相关内容

  • 没有找到相关文章

最新更新