Commande dans un NSTextView

tabliertablier Membre
septembre 2013 modifié dans API AppKit #1

Suite du post nsstream et stderr.


 


Quand on clique dans un NSTextView, cela ouvre un "field editor". Je souhaite exécuter une méthode quand l'utilisateur entre un retour à  la ligne et je n'y arrive pas. 


Dans la doc j'ai trouvé différents textes sur le "field editor": "working with the field editor", "Using a custom field editor" ... etc  Je commence a m'y perdre entre un delegate que je n'arrive pas à  mettre en place, la possibilité de sous-classer le NSTextView ou comment utiliser une des deux méthodes:


 


- (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor doCommandBySelector:(sel)commandSelector 


(id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)anObject 


 


Quelqu'un a t-il une idée de comment faire exécuter une méthode quand l'utilisateur entre un retour à  la ligne dans un NSTextView.


Réponses

  • D'abord, un clic sur un NSTextView n'ouvre pas un field editor, car le field editor est un NSText, ce qu'est déjà  un NSTextView (c'est un clic sur un NSTextField qui ouvre le field editor)


     


    Essaye la méthode déléguée:


    - (BOOL)textView:(NSTextView *)aTextView doCommandBySelector:(SEL)aSelector

  •  en complément de la réponde de mpergand



    - (BOOL)textView:(NSTextView *)aTextView doCommandBySelector:(SEL)aSelector
    {

    if (aSelector == @selector(insertNewline:))
    {
    // ton code
    return YES;
    }

    return NO;
    }

  •  


    D'abord, un clic sur un NSTextView n'ouvre pas un field editor, car le field editor est un NSText, ce qu'est déjà  un NSTextView (c'est un clic sur un NSTextField qui ouvre le field editor)



    Exact! j'étais un peu perdu là !!  Cool, ça marche.


    Question subsidiaire: Cette méthode définie depuis OSx 10.0 est dans le NSTextViewDelegate valable depuis 10.6.   Jusqu'à  10.5 cette méthode était dans un protocole informel. Pour que ça marche sous 10.5 et 10.6 comment fait-on? un projet agregate?


  • On fait rien :)


     


    Donner un nom à  un protocole informel c'est une manière plus structurée de définir un protocole. Du point de vue fonctionnel, cela ne change rien.


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