Editer une cellule d'une NSTableView par un simple clic

RocouRocou Membre
21:37 modifié dans API AppKit #1
J'aimerai accéder à  l'édition d'une cellule d'une NSTableView simplement en cliquant dessus. (Un simple clic, pas un double-clic).

J'ai essayé d'utiliser editColumn:row:withEvent:select: mais ça ne semble pas avoir la moindre influence:
[maTable editColumn:[maTable selectedColumn] row:[maTable selectedRow]withEvent:nil select:YES];


Je sèche  ???

Réponses

  • ThibautThibaut Membre
    21:37 modifié #2
    Je pense que le problème est ailleurs. Je viens de tester avec simplement le code suivant et cela fonctionne parfaitement :

    @implementation testAppDelegate<br /><br />@synthesize window, tableView;<br /><br />- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {<br />	[self.tableView editColumn:0 row:0 withEvent:nil select:YES];<br />}<br /><br />- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView {<br />	return 10;<br />}<br /><br />- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex {<br />	return [NSString stringWithFormat:@&quot;Row %i&quot;, rowIndex];<br />}<br /><br />@end
    

  • RocouRocou Membre
    21:37 modifié #3
    dans 1257852637:

    Je pense que le problème est ailleurs. Je viens de tester avec simplement le code suivant et cela fonctionne parfaitement :

    @implementation testAppDelegate<br /><br />@synthesize window, tableView;<br /><br />- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {<br />	[self.tableView editColumn:0 row:0 withEvent:nil select:YES];<br />}<br /><br />- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView {<br />	return 10;<br />}<br /><br />- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex {<br />	return [NSString stringWithFormat:@&quot;Row %i&quot;, rowIndex];<br />}<br /><br />@end
    


    Merci pour le test mais je ne suis pas plus avancé. Chez moi un clic sélectionne une ligne mais il faut double-cliquer pour entrer en mode édition.
    Sinon pourquoi cette syntaxe: self.tableView?
    Pourquoi pas tableView tout simplement?
  • ThibautThibaut Membre
    21:37 modifié #4
    Pour self.tableView ? Simplement par habitude, j'utilise les accesseurs dans la mesure du possible pour éviter tout problème mémoire.

    Pour ton problème, es-tu sûr que cette ligne de code est bien prise en compte durant l'exécution ? Je pense que si la ligne est sélectionnée, c'est simplement dû au clic de la souris.
  • ThibautThibaut Membre
    21:37 modifié #5
    Ok, je viens de trouver le problème.

    [maTable selectedColumn]
    

    Ceci retourne l'index de la colonne sélectionnée. On peut sélectionner une colonne en cliquant sur son entête. Mais dans le cas où l'on sélectionne une ligne, cela retourne -1.


    La solution est donc de récupérer la cellule sélectionnée puis de récupérer la colonne associée à  cette cellule :
    [[maTable selectedCell] columnNumber]
    
  • RocouRocou Membre
    21:37 modifié #6
    dans 1257860368:

    Ok, je viens de trouver le problème.

    [maTable selectedColumn]
    

    Ceci retourne l'index de la colonne sélectionnée. On peut sélectionner une colonne en cliquant sur son entête. Mais dans le cas où l'on sélectionne une ligne, cela retourne -1.


    La solution est donc de récupérer la cellule sélectionnée puis de récupérer la colonne associée à  cette cellule :
    [[maTable selectedCell] columnNumber]
    


    On progresse, merci  8--)
    Cette fois on entre bien en édition mais c'est toujours la première colonne qui est éditée.
    Et pas moyen de faire un nslog de [[maTable selectedCell] columnNumber], j'obtiens le message d'erreur suivant: -[NSTextFieldCell columnNumber]: unrecognized selector sent to instance 0x2817940
  • ClicCoolClicCool Membre
    novembre 2009 modifié #7
    ni NSCell, ni NSTextFieldCell en effet n'implémentent de méthode [tt]selectedColumn[/tt] ce qui est logique.

    A mon avis tu devrais arriver à  un meilleur résultat avec la méthode de NSTableView: [tt]- (NSInteger)clickedColumn[/tt].
  • ThibautThibaut Membre
    21:37 modifié #8
    C'est un entier :
    NSLog(@&quot;%i&quot;, [[maTable selectedCell] columnNumber]);
    


    Pour ton nouveau problème, cela vient du fait que lorsque tu cherches à  sélectionner un élément, il sélectionne une ligne complète. Du coup, le "selectedCell" retourne la première cellule sélectionnée. Il faudrait donc trouver une autre méthode...
  • RocouRocou Membre
    21:37 modifié #9
    dans 1257877196:

    ni NSCell, ni NSTextFieldCell en effet n'implémentent de méthode [tt]selectedColumn[/tt] ce qui est logique.

    A mon avis tu devrais arriver à  un meilleur résultat avec la méthode de NSTableView: [tt]- (NSInteger)clickedColumn[/tt].

    Oui, merci ça fonctionne très bien.

    Merci à  tous
  • Guillaume CGuillaume C Membre
    21:37 modifié #10
    dans 1258039947:

    dans 1257877196:

    ni NSCell, ni NSTextFieldCell en effet n'implémentent de méthode [tt]selectedColumn[/tt] ce qui est logique.

    A mon avis tu devrais arriver à  un meilleur résultat avec la méthode de NSTableView: [tt]- (NSInteger)clickedColumn[/tt].

    Oui, merci ça fonctionne très bien.

    Merci à  tous


    Est-ce que tu pourrais STP mettre en ligne un projet Xcode de la solution? Merci :-)
  • RocouRocou Membre
    21:37 modifié #11
    dans 1258058141:

    Est-ce que tu pourrais STP mettre en ligne un projet Xcode de la solution? Merci :-)

    hop!
  • Guillaume CGuillaume C Membre
    21:37 modifié #12
    dans 1258101922:

    dans 1258058141:

    Est-ce que tu pourrais STP mettre en ligne un projet Xcode de la solution? Merci :-)

    hop!


    MERCI 
Connectez-vous ou Inscrivez-vous pour répondre.