1

私のアプリケーションは、明らかに、メニューバーにメインメニューがあります。NSPopUpButtonこれらのメニュー項目の1つには、アプリの他の場所でも使用できるサブメニューが含まれています。

今まではメニューオプションを(プログラムで)コードで複製してポップアップボタンを作成してきましたが、セレクターの名前やメニュー項目のタイトルなどを変更すると、必然的に同じ変更を忘れてしまいますポップアップボタンで。

メニューを一箇所で定義し、二箇所で使用したいのですが。これは可能ですか?

私はこれを試しました:

// Get the same menu used by the main menu
NSMenu *addMenu = [[[[[NSApp mainMenu] itemWithTitle:@"Project"] submenu] itemWithTitle:@"Add"] submenu];

NSMenuItem *item = [[[NSMenuItem alloc] init] autorelease];
[item setImage:[NSImage imageNamed:NSImageNameAddTemplate]];
[item setOnStateImage:nil];
[item setMixedStateImage:nil];

addButton = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(2, 5, 26.0, 16.0)];
[addButton setPullsDown:YES];
[addButton setBordered:NO];
[[addButton cell] setUsesItemFromMenu:NO];
[[addButton cell] setMenuItem:item];
[[addButton cell] setArrowPosition:NSPopUpNoArrow];
[addButton setAutoresizingMask:NSViewMaxXMargin];
[addButton setToolTip:@"Add Files or Directories"];

// Use the same menu as the main menu
[addButton addItemWithTitle:@"Add"];
[[addButton lastItem] setSubmenu:addMenu]; // <--- Breaks here

残念ながら、これにより次のようなランタイムエラーが発生します。

2010-12-19 02:56:11.571 MojiBaker [85384:a0f] * -[NSMenuItem setSubmenu:]、/ SourceCache / AppKit / AppKit-1038.35 / Menus.subproj / NSMenuItem.m:695でアサーションが失敗しました

4

1 に答える 1

2

を使用する-copyとこの作業が行われましたが、すべてのキーボード ショートカットがポップアップ ボタンに表示されていることに気付きました。

NSMenu *mainAddMenu = [[[[[NSApp mainMenu] itemWithTitle:@"Project"] submenu] itemWithTitle:@"Add"] submenu];
NSMenu *addMenu = [[[NSMenu alloc] initWithTitle:@"Add"] autorelease];
for (NSMenuItem *addMenuItem in [mainAddMenu itemArray]) {
    [addMenu addItemWithTitle:[addMenuItem title] action:[addMenuItem action] keyEquivalent:@""];
}
于 2010-12-18T16:27:40.167 に答える