5

NSToolbarItem からポップアップ メニューを開こうとしています。この例に従ってみましたが、NSToolbar と NSToolbarItem は NSView ではなく NSObject から継承されるため、そのクラス メソッドを使用できません。

カスタム ビューを作成する以外に、NSToolbarItem からポップアップ メニューを開く最良の方法は何ですか?

4

5 に答える 5

4

基本的には、 のようなものを作成し、のメソッドを使用しNSButtonて、toolbarItem にボタンを埋め込みます。NSMenuNSToolbarItemsetView:

于 2009-09-30T18:41:43.917 に答える
3

参考までに: この投稿は長い間終わっていますが、私はブラウジングしているだけで、簡単な方法があるので、他の誰かがそれを調べた場合に備えて答えを出すと思いました. Library から Interface Builder のツールバーにポップアップ ボタンを直接ドラッグできないことがわかりました。ただし、ポップアップ ボタンをウィンドウからツールバーにドラッグすることはできます。だから私は最初にウィンドウにポップアップボタンを作成し、それをツールバーにドラッグします...うまくいきます! 他のオブジェクトも同様です。

于 2010-04-02T23:18:45.357 に答える
3

必要に応じて、メニューを使用して IB で NSView を作成するだけです。次に、ウィンドウ コントローラーに、次のようなコードを追加します。

// This assumes you have a window property pointing to the window to which you'll
// add the toolbar. It also assumes you've connected the NSView to add to the
// toolbar to a member called toolbarView.

- (NSArray*)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar {
    return [NSArray arrayWithObject:@"myToolbarMenu"];
}

- (NSArray*)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar {
    return [self toolbarAllowedItemIdentifiers:toolbar];
}

- (NSToolbarItem*)toolbar:(NSToolbar*)toolbar
    itemForItemIdentifier:(NSString*)str
willBeInsertedIntoToolbar:(BOOL)flag
{
    if ([str isEqualToString:@"myToolbarMenu"] == YES) {
        NSToolbarItem* item = [[NSToolbarItem alloc] initWithItemIdentifier:str];
        [item setView:toolbarView];
        [item setMinSize:[toolbarView frame].size];
        [item setMaxSize:[toolbarView frame].size];
        return [item autorelease];  
    }
    return nil;
}

- (void)windowDidLoad {
    NSToolbar* toolbar = [[NSToolbar alloc] initWithIdentifier:@"myToolbar"];
    [toolbar setDelegate:self];
    [self.window setToolbar:[toolbar autorelease]];
}
于 2009-09-30T18:39:45.810 に答える
3

ツールバー項目に実際のポップアップ ボタンが必要な場合は、NSPopUpButton をツールバー項目のビューとして設定します。

Interface Builder 3.2.1 (この機能が実際にいつ導入されたかはわかりません) では、nib ウィンドウのオブジェクトの階層リストでツールバーにドリルダウンし、ライブラリ パレットからポップアップ ボタンをリストのツールバー。IB がボタンをツールバー項目にラップします。

于 2009-09-30T23:59:44.447 に答える