fonctionnement de NSTableView

meallmeall Membre
19:01 modifié dans API AppKit #1
Bonjour,

Je veux faire une petite appli dans laquelle j'ai un NSTableView qui contient certains éléments de mon data source. Cependant ce que je voudrais c'est que en double cliquant (ou quelque chose de similaire) je puisse ouvrir le data source dans une autre fenêtre qui premettra d'afficher plus d'information du Data source. En gros, c'est une liste d'élément qu'on explose pour voir les détails...

Cependant, je ne sais pas trop comment je peux réaliser ça. Je vois que si mon NSTAbleView est en mode non éditable il y a 2 fonctions (setDoubleAction et doubleAction) qui se rapproche de ce que je cherche à faire. Je suppose que je dois utiliser le setDoubleaction (selector) et définir un selector (une methode quelque part dans mon code) à appeler en cas de double click. Je ne suis juste pas sur de comment je devrais utiliser doubleAction, ou même si je devrais l'utiliser...

Merci

Réponses

  • ClicCoolClicCool Membre
    19:01 modifié #2
    bonjour meall,
    Il semble, que pour ce que tu veux faire, ta piste soit une bonne possibilité.
    1) Défini dans ton Contrôle une Méthode prenant un seul paramètre genre:
    -(void) doubleClicSurMaTable:(id)sender
    2) crée, dans le header de ton contrôle et IB, un IBOutlet pointé sur ta table (si ce n'est déjà fait)
    IBOutlet NSTableView *maTable;
    3) Lors de l'initialisation de ta NSTableView (par ex dans awakeFromNib) tu fais:
    [maTable setTarget: monControleur];
    [maTable setDoubleAction: @selector(doubleClicSurMaTable)];

    @+
    ClicCool
  • fullstackfullstack Membre
    19:01 modifié #3
    et comment fait ton pour renvoyer une action avec un seul clic ?
  • 19:01 modifié #4
    Si ce que tu appelles simple click est un changement de ligne, il suffit d'utiliser la méthode de délégué - (void)tableViewSelectionDidChange:(NSNotification *)aNotification du délégué de la table.
  • Eddy58Eddy58 Membre
    19:01 modifié #5
    On peut aussi faire une connexion d'action dans IB, entre le TableView et un controleur. Ensuite on récupère la rangée choisie avec un [sender selectedRow]

    -(IBAction)clickTableView:(id)sender
    {
        int rangee=[sender selectedRow];
    }
  • 19:01 modifié #6
    Et si je peux me permettre un petite remarque à  propos des deux dernier posts... ce sont de petits détails mais le côté pratique d'utiliser le delegate c'est que, personnellement je fais comme ça, on déclare le delegate dans le awakeFromNib de cette manière on n'a plus qu'à  connecter l'outlet dans IB, et IB nous indique si une outlet n'est pas connecté, ce n'est pas le cas pour une action. Donc en clair utiliser le delegate dans ce cas assez précis sur la TV permet de limiter le travail dans IB, c'est bien pratique si un gogo s'amuse à  jouer avec vos nib... et en cas de localisation ou autre...

    Voilà , je l'avais dis, c'est du détail  ::)
Connectez-vous ou Inscrivez-vous pour répondre.