Domanda

Sto cercando di aprire un menu a comparsa da un NSToolbarItem. Ho provato seguendo questo esempio ma non posso usare quel metodo di classe perché NSToolbar e NSToolbarItem ereditano da NSObject e non da NSView.

Oltre a creare una vista personalizzata, qual è il modo migliore per aprire un menu a comparsa da un NSToolbarItem?

È stato utile?

Soluzione

A proposito: questo post è finita da un pezzo, ma io sono solo la navigazione e non ho un metodo facile per questo modo che io ho pensato di dare una risposta nel caso in cui qualcun altro guarda attraverso di essa. Ho scoperto che non riesco a trascinare un pulsante di pop-up direttamente alla barra degli strumenti in Interface Builder dalla Libreria. Tuttavia, posso trascinare un pulsante di comparsa dalla finestra per la barra degli strumenti. Così creo il tasto popup sulla finestra e poi trascinare che alla barra degli strumenti ... funziona! Lo stesso con altri oggetti.

Altri suggerimenti

In sostanza, si crea qualcosa come un NSButton che ha un NSMenu collegato ad esso, quindi utilizzare il metodo di NSToolbarItem setView: per incorporare il pulsante nella ToolbarItem.

Basta creare un NSView in IB con vostro menu come si desidera. Poi nel controller della finestra, aggiungere del codice in questo modo:

// 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]];
}

Se si desidera un pulsante vero pop-up per la voce della barra degli strumenti, impostare un NSPopUpButton come punto di vista della voce della barra degli strumenti.

In Interface Builder 3.2.1 (non so quando questa abilità è stato effettivamente introdotto), è possibile eseguire il drill down alla barra degli strumenti nella lista gerarchica di oggetti nella finestra pennino, e trascinare un pulsante di pop-up dal palette Libreria nella barra degli strumenti nella lista. IB si concluderà il pulsante nella barra degli strumenti un elemento per voi.

Supponendo menu è un oggetto NSMenu e sender è un NSToolbarItem, allora tutto quello che dovete fare è passare nel sender.view per visualizzare il menu. Non c'è bisogno di aggiungere un altro parere se hai già impostato il NSToolbarItem tramite Interface Builder.

[NSMenu popUpContextMenu:menu
               withEvent:[NSApp currentEvent]
                 forView:sender.view];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top