Cocoa: Comment avoir un menu contextuel lorsque vous faites un clic droit sur une cellule de NSTableView
J'ai un TableView avec la coutume des cellules. Je veux un menu contextuel s'affiche lorsque l'utilisateur clique-droite sur (ou tout autre Apple variantes de droite de la souris) sur l'une des cellules (et de savoir qui de la cellule qu'ils ont cliqué sur).
J'ai essayé de la sous-classe NSTableView et de remplacer cette méthode:
- (NSMenu *)menuForEvent:(NSEvent *)theEvent;
Mais il n'est jamais appelé.
D'autre part,
- (void)rightMouseDown:(NSEvent *)theEvent;
Est appelée. Mais je ne suis pas sûr que c'est celui que nous voulons.
Plus de détails:
//
// PTTableView.m
//
//
// Created by Nathan Hazout on 5/31/11.
// Copyright 2011 __MyCompanyName__. All rights reserved.
//
#import "PTTableView.h"
@implementation PTTableView
- (id)init
{
self = [super init];
if (self) {
//Initialization code here.
}
return self;
}
- (void)rightMouseDown:(NSEvent *)theEvent {
NSLog(@"entered rightMouseDown");
}
- (NSMenu *)menuForEvent:(NSEvent *)theEvent {
NSLog(@"entered menuForEvent");
return [super menuForEvent:theEvent];
}
- (NSView *)hitTest:(NSPoint)aPoint{
NSLog(@"entered hitTest");
return [super hitTest:aPoint];
}
- (void)dealloc
{
[super dealloc];
}
@end
rightMouseDown est appelée. hiTest est appelée à de nombreuses reprises. Mais menuForEvent ne le fait pas.
source d'informationauteur Nathan H
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas besoin de bricolons avec la gestion des événements, tout ce que vous avez à faire pour attribuer un menu contextuel est de définir l'affichage de la table de
menu
prise de point à laNSMenu
objet que vous souhaitez utiliser pour le menu contextuel.Vous pouvez le faire dans Interface Builder, par la suppression d'un
NSMenu
objet dans votre fichier nib et de contrôle-les glisser à partir de la table de la vue du menu pour définir la prise de courant.Alternativement, vous pouvez utiliser le
-setMenu:
méthode deNSTableView
(héritée deNSResponder
) afin d'attribuer le menu par programmation.