Pergunta

Eu estou tentando abrir um menu pop-up de um NSToolbarItem. Eu tentei seguir este exemplo mas Eu não pode usar esse método de classe porque NSToolbar e NSToolbarItem herdar de NSObject e não de NSView.

Além de criar uma exibição personalizada, qual é a melhor maneira de abrir um menu pop-up de um NSToolbarItem?

Foi útil?

Solução

FYI: este post é longa acabou, mas eu estou apenas navegando e eu tenho um método fácil para isso, então eu pensei que eu iria dar uma resposta em caso alguém olha outra pessoa por ele. Eu descobri que não pode arrastar um botão pop-up diretamente para a barra de ferramentas no Interface Builder da Biblioteca. No entanto, posso arrastar um botão pop-up da janela para a barra de ferramentas. Então eu criar o botão de contexto na janela do primeiro e arraste então que a barra de ferramentas ... funciona! O mesmo acontece com outros objetos.

Outras dicas

Basicamente, você cria algo como um NSButton que tem um NSMenu ligado a ele, então o método NSToolbarItem uso de setView: para incorporar o botão no toolbarItem.

Basta criar uma NSView em IB com o seu menu como quiser. Então, em seu controlador janela, adicionar algum código como este:

// 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 você quer um botão real pop-up para o item da barra de ferramentas, definir um NSPopupButton como vista do item barra de ferramentas.

Em Interface Builder 3.2.1 (eu não sei quando essa capacidade foi realmente introduzida), você pode navegar para a barra de ferramentas na lista hierárquica de objetos na janela a ponta, e arraste um botão de pop-up a partir do paleta de biblioteca na barra de ferramentas na lista. IB vai embrulhar o botão em um item de barra de ferramentas para você.

Assumindo menu é um objeto NSMenu e sender é um NSToolbarItem, então tudo que você precisa fazer é passe na sender.view para mostrar o menu. Não há necessidade de adicionar outro ponto de vista, se você já tiver configurado o NSToolbarItem via Interface Builder.

[NSMenu popUpContextMenu:menu
               withEvent:[NSApp currentEvent]
                 forView:sender.view];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top