78 votes

Double-cliquez sur une ligne NSTableView dans Cocoa?

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?

140voto

Jim Puls Points 29289

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.

56voto

amateur barista Points 1449

L'ajout de plus d'informations de base pour @JimPuls réponse pour le bénéfice d'autres nouveaux arrivants au Cacao.

  1. 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é.
  2. 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.
  3. 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.

10voto

GeoffCoope Points 179

Comme PR Singh dit, vous pouvez utiliser le cacao liaisons, vous pouvez également passer le long de la selectedObjects.

  1. 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

1voto

PR Singh Points 364

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X