2017-04-20 8 views
0

J'ai un NSTableView et chaque ligne contient un bouton. J'ai aussi un menu associé à la table.NSEvent à partir d'un NSButton

Le problème est: Je veux afficher le menu en cliquant sur le bouton. Si possible, ne pas afficher sur le clic droit.

La méthode d'action est:

- (IBAction)showMenu:(NSButton *)button { 
    NSLog(@"show menu"); 
    NSMenu *menu = [self.tableView menu]; 
    NSEvent *event = [[NSEvent alloc] init]; 


    [NSMenu popUpContextMenu:menu 
        withEvent:event 
        forView:button]; 

} 

Voici ce qu'il faut faire avec event? Si j'utilise nil alors le menu est affiché en bas à gauche, pas à côté du bouton.

Toute aide serait appréciée.

+0

Vous pouvez obtenir l'événement en cours: '[NSApp currentEvent]'. Pensez à utiliser un 'NSPopupButton' en mode déroulant. – Willeke

Répondre

0

Vous pouvez essayer d'utiliser -[NSMenu popUpMenuPositioningItem:atLocation:inView:]. Cette méthode ne prend pas un argument NSEvent. Au lieu de cela, vous lui donnez une vue et un emplacement dans le système de coordonnées de la vue, et le menu se positionne lui-même (ou l'un de ses éléments) sur cet emplacement. Mais je suggère de ne pas utiliser du tout NSButton. Si vous utilisez un NSPopUpButton à la place, il prendra soin d'afficher le menu à l'emplacement correct sur un clic gauche.

+0

Merci Rob, mon exigence est d'utiliser la conception de NSButton (IU) je ne peux pas changer. Cependant, j'ai réalisé très similaire à ce que vous avez mentionné. '- (IBAction) showMenu: Bouton (NSButton *) { NSMenu * menu = self.tableView.menu; NSPoint point = NSMakePoint (-menu.size.width, 0); [menu popUpMenuPositioningItem: [élément de menuAtIndex: 0] atLocation: point inView: bouton]; } ' –