2

私は NSDocument (NSPersistentDocument) に基づくアプリケーションを持っています。アプリケーションでは、(通常のように) 複数のドキュメントを作成できます。

メイン ドキュメント ウィンドウ (NSPersistentDocument に基づく) には、IB、ツールバーが追加されています。insertItemWithItemIdentifierコードでは、メソッドとを使用してツールバー項目 (NSToolbarItems) に追加します- (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag

コードサンプル:

[_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;         
    }
}

ドキュメントを 1 つだけ開くまでは、すべて問題ありません。最初のドキュメント ウィンドウで 2 番目のドキュメントを開く (または新しいドキュメントを作成する) と、ツールバー アイテムが 2 倍になります (3 番目のドキュメントを開くと、アイテムは最初のウィンドウで 3 倍になり、2 番目のウィンドウで 2 倍になるなど)。

itemForItemIdentifier編集:ツールバー項目を追加しようとするたびに、各ウィンドウで呼び出されることに気付きました。例: 2 つのウィンドウ (2 つの開いているドキュメント) があり、1 つのウィンドウに 1 つのボタンを追加しようとするitemForItemIdentifierと、2 回呼び出されます。
すべてのドキュメントには、このドキュメントにのみデリゲートが設定された独自のツールバーがあるため、私には奇妙です。

私は自分が何を間違ったのか分かりません。誰かが私がどこを間違えたか指摘してくれるかもしれません。

4

2 に答える 2

1

私は解決策を見つけました:このメソッドツールバーを作成したそれぞれがこれと同じ識別子を持っているため、nibから作成されたtooolbarを使用できません。異なる識別子を使用してコードでツールバーを作成したとき、問題は解決しました。

于 2012-07-23T08:32:41.080 に答える
1

通常、自分でツールバー項目を挿入することはありません。デリゲート メソッドtoolbarAllowedItemIdentifiers:を実装するtoolbarDefaultItemIdentifiers:と、それらのリストに従ってツールバーが初期化されます。

于 2012-07-23T00:00:18.920 に答える