activer l'édition d'un NSTextField et valider la modification

wiskywisky Membre
novembre 2007 modifié dans API AppKit #1
Bonjour tout le monde,

Cela fait très longtemps que je ne suis pas venu. La faute au boulot et la pas envie de coder. Enfin bon...
Je viens d'installer xCode 3. J'ai été quelque peu dérouté dans IB mais au final c'est carrément mieux qu'avant (prise en mais en 10min). ;)

Mais la question n'est pas là  ! Alors je vous explique. J'ai un objet NSTextField qui n'est pas selectionnable et pas éditable. Je veux pouvoir le rendre éditable lors d'un double click dessus et le remettre non éditable lorsque l'utilisateur valide par entrée ou par un click à  côté. :(
J'ai cherché du côté du delegate, mais ça ne marche pas. avez-vous une idée ?

Merci d'avance.

PS: Le site est super comme ça ;)

Réponses

  • schlumschlum Membre
    20:34 modifié #2
    - (void)mouseDown:(NSEvent *)theEvent
    


    NSEvent a une méthode "clickCount"
  • psychoh13psychoh13 Mothership Developer Membre
    20:34 modifié #3
    Et tu le récupères comment l'event assigné à  un objet que tu ne crées pas ?
  • schlumschlum Membre
    20:34 modifié #4
    Ben... ça s'appelle "sous-classer"  ???

    Dans Interface Builder, on peut utiliser une custom class pour les objets ; ici il suffit de mettre une custom class qui est une sous-classe à  nous de NSTextField  :P

    PS : ne pas oublier de répercuter [super mouseDown:theEvent] par contre...
  • wiskywisky Membre
    20:34 modifié #5
    Merci schlum, cela me permet bien d'éditer, maintenant, il faut que j'arrive à  valider la saisie par l'une des touche entrée ou par la perte du focus. Tu a une idée ?
  • psychoh13psychoh13 Mothership Developer Membre
    20:34 modifié #6
    Et bien là , le delegate devrait suffire je pense, tu utilises les méthodes définies dans NSControl : – control:textShouldEndEditing: ou – controlTextDidEndEditing:.
  • schlumschlum Membre
    20:34 modifié #7
    Yep... Ou pour rester dans le même esprit, directement :

    - (void)textDidEndEditing:(NSNotification *)aNotification
    


    Encore une fois en n'omettant surtout pas d'appeler sur le "super" avant !
  • wiskywisky Membre
    20:34 modifié #8
    Encore merci schlum, ça marche nikel  :adios!:
  • TchouboudouTchouboudou Membre
    20:34 modifié #9
    dans 1195925642:

    Yep... Ou pour rester dans le même esprit, directement :

    - (void)textDidEndEditing:(NSNotification *)aNotification
    


    Encore une fois en n'omettant surtout pas d'appeler sur le "super" avant !


    Il faut appeler sur le super au début de la méthode ? Il me semblait qu'il fallait le faire à  la fin...
  • psychoh13psychoh13 Mothership Developer Membre
    20:34 modifié #10
    ça dépend des méthodes et surtout de ce que tu veux faire.

    Quand on parle de -dealloc il faut forcément le faire après parce que si tu désalloues les variables qui contiennent les pointeurs des objets dont tu as la charge, tu ne pourras plus y accéder et tu auras du mal à  nettoyer tes objets.

    Dans le cas des -init il faut le faire avant parce qu'il faut que les super-classes fasse les bonnes initialisations et si jamais ça plante, t'auras du mal à  le vérifier après, et il faudra là  aussi que tu nettoies correctement.

    Pour cette méthode, je pense que c'est kif-kif, mais il vaudrait mieux le faire en premier, comme ça on ne risque pas de modifier des trucs sensibles avant que la méthode s'exécute correctement. Et puis cette méthode fait pas mal d'appels autour, il vaut mieux que ça soit régler en premier et ensuite tu fais ta propre sauce.
  • schlumschlum Membre
    20:34 modifié #11
    Oui-da, c'est pour ça que j'ai dit avant  :P

    Si on le fait après, y a un risque que l'action perso qu'on ait faite le gêne dans ce qu'il veut faire.
Connectez-vous ou Inscrivez-vous pour répondre.