J'ai besoin que mon application ouvre une fenêtre lorsqu'un utilisateur double-clique sur une ligne dans une NSTableView
. J'ai un peu de difficulté à trouver des informations ou des exemples sur la façon de procéder. Quelqu'un peut-il me diriger dans la bonne direction?
Réponses
Trop de publicités?Jetez un oeil à l' -setDoubleAction:
méthode sur NSTableView; vous pouvez spécifier une méthode qui sera appelée tout comme la normale à la cible de l'action du système, mais sur un double-clic.
Dans cette méthode d'action, -clickedRow
sera utile.
L'ajout de plus d'informations de base pour @JimPuls réponse pour le bénéfice d'autres nouveaux arrivants au Cacao.
- Un IBOutlet à la NSTableView doit être déclaré dans une interface. Je suppose qu'il est préférable de le faire à la table de son délégué.
- Le IBOutlet de la table doit être connecté via l'Interface Builder. Faire Ctrl-Drag & Drop de l'IB à partir de la classe qui déclare la prise de courant à la vue de la table. Lorsque vous relâchez votre souris une fenêtre devrait apparaître avec le nom de la prise déclarée à l'étape #1. Sélectionnez cette.
- Dans le @de mise en œuvre de l'article, sur l'-awakeFromNib méthode, appelez -setTarget: et -setDoubleAction: sur le IBOutlet déclaré à l'étape #1 et connecté à l'étape #2.
Voici un extrait de ma vue table du délégué. J'ai mon délégué a également mis en place comme la source de données, c'est pourquoi vous verrez à la fois le NSTableViewDelegate et NSTabeViewDataSource interfaces associées.
// L'Interface de l'extrait.
@interface MyTableViewDelegate : NSObject <NSTableViewDelegate, NSTableViewDataSource>
{
// This iVar needs to be connected to the table view via the IB.
IBOutlet NSTableView *tableOutlet;
}
@property (assign) IBOutlet NSTableView *tableOutlet;
- (void)doubleClick:(id)nid;
@end
// Mise en œuvre de l'extrait.
@implementation MyTableViewDelegate
@synthesize tableOutlet = _tableOutlet;
- (void)awakeFromNib {
[_tableOutlet setTarget:self];
[_tableOutlet setDoubleAction:@selector(doubleClick:)];
}
- (void)doubleClick:(id)object {
// This gets called after following steps 1-3.
NSInteger rowNumber = [_tableOutlet clickedRow];
// Do something...
}
Espérons que cette aide.
Comme PR Singh dit, vous pouvez utiliser le cacao liaisons, vous pouvez également passer le long de la selectedObjects.
-
Sélectionnez votre Table dans IB), dans les Liaisons inspecteur de définir ces deux liaisons comme suit:
>Double Click Target bind to = Application delegate object (or file owner) model key path = self selector name = myMethod: >Double Click Argument bind to = array controller controller key = selectedObjects selector name = myMethod:
Où myMethod est mis en œuvre comme
- (void)myMethod:(NSArray*)selectedObjects
{
NSLog(@"%@", selectedObjects);
}
C'est également documentée ici: https://developer.apple.com/library/mac/qa/qa1472/_index.html
Vous pouvez faire la même chose avec les liaisons, tout d'abord déclarer une mentod .h fichier
-(IBAction)openWindow:(id)sender
dans .m mettre en place le même fichier
-(IBAction)openWindow:(id)sender
{
//do something here;
}
parvenus à la plume où votre table, sélectionnez la vue de la table et a obtenu le deuxième dernier onglet de l'attribut de l'inspecteur,ouvrir double cicl argument triangle à cocher lier à vérifier fox sélectionner propriétaire du fichier, le modèle de la clé pat doit être "auto", le sélecteur de nom sera "openWindow:", de même processus de "Double-cliquez sur la cible" la divulgation, Cela fonctionne