TableView : garder la ligne courante sélectionnée quand on appuie sur Entrée

maestricmaestric Membre
07:29 modifié dans API AppKit #1
Dans une tableView, comment garder la ligne courante sélectionnée quand on la valide ? (entrée), comme dans iTunes? N'y a-t-il pas d'autre solution que de surcharger la classe NSTableView et de redéfinir
- (void)keyDown: (NSEvent*)event
?

Autre petite question : comment trier une tableView selon une colonne ? Je veux dire comme si l'utilisateur avait cliqué sur le titre de la colonne, provoquant son tri. J'aimerais le faire dans le awakeFromNib.

Merci !  :D

Réponses

  • 07:29 modifié #2
    Surcharger keyDown ne servira rien: la vue active au moment où tu presses sur enter n'est pas la table, mais une textview dans laquelle se fait l'édition. Je n'ai pas de réponse comme ça à  ta question, mais d'une règle générale, il est inutile en Cocoa de surcharger les méthodes keyDown, keyUp & co: NSResponder inclus déjà  des méthodes "prédigérée" comme moveUp:, insertNewLine: (qui es utilisé pour enter) qui sont justement faites pour être sous classées. ça permet de garder une cohérence au niveau des raccourcis claviers entre toutes les applications.

    Pour ton autre question, merci de créer un nouveau sujet (ou faire une recherche, je suis sur que le sujet a déjà  été traité).
  • Eddy58Eddy58 Membre
    07:29 modifié #3
    dans 1140348326:

    Dans une tableView, comment garder la ligne courante sélectionnée quand on la valide ? (entrée)

    Sujet déjà  traité ici. :o
  • maestricmaestric Membre
    07:29 modifié #4
    J'aurais dû pousser un peu plus ma recherche avant d'écrire ce post !  :o
    Merci pour votre patience et vos réponses, j'ai trouvé ce qu'il me fallait.


    Pour garder la ligne courante de la tableView sélectionnée, en résumé :
    - dans le awakeFromNib : s'abonner aux notifications NSTextDidEndEditingNotification
    NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];<br />		[nc addObserver:self selector:@selector(textDidEndEditing:) name:NSTextDidEndEditingNotification object:nil];
    


    Dans la méthode appelée, si c'est bien la tableView qui a envoyé la notification, garder la ligne courante sélectionnée :

    // triggered by a NSTextDidEndEditingNotification<br />- (void)textDidEndEditing:(NSNotification *)aNotification<br />{<br />	// if poster is the tableView, keeps the current row selected<br />	if([[[aNotification object] superview] superview] == tableView) {<br />		int selectedRow = [tableView selectedRow];<br />		[tableView textDidEndEditing:aNotification];<br />		[tableView selectRow:selectedRow byExtendingSelection:NO];<br />	}<br />}
    



    Pour trier une table alimentée par les bindings par une colonne au lancement de l'application :
    - (void)sortCurrentOperationsMonth<br />{<br />	NSSortDescriptor *dayOfMonthDescriptor=[[[NSSortDescriptor alloc] initWithKey:@&quot;dayOfMonth&quot; ascending:YES] autorelease];<br />	NSArray *sortDescriptors=[NSArray arrayWithObject:dayOfMonthDescriptor];<br />	[opsArrayController setSortDescriptors:sortDescriptors];<br />}
    


    Merci encore !  :adios!:
Connectez-vous ou Inscrivez-vous pour répondre.