NSTextField et finir la frappe
mac_manu
Membre
Bonjour,
Qui peut m'expliquer comment procéder pour, comme les NSComboBox, "deviner" un mot lors de la saisie de texte dans une NSTextField? Si vous avez un pt'it exemple, j'suis preneur.
Merci
Qui peut m'expliquer comment procéder pour, comme les NSComboBox, "deviner" un mot lors de la saisie de texte dans une NSTextField? Si vous avez un pt'it exemple, j'suis preneur.
Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
C'est à toi de programmer ça.
NSControl te fournit un delegate tout beau tout chaud pour ça :
control:textView:completions:forPartialWordRange:indexOfSelectedItem:
.
Essayé, pas encore pu! Faut-il sous-classer NSTextView? Quelle action déclenche le processus (pour controlTextAsChange par ex. c'est chaque fois que le texte change, via le delegate) par contre pour ce cas là , je ne vois pas très bien. :-\\
Le delegate que je t'ai donné permet de compléter une saisie, mais il faut appuyer sur la touche F5.
Toi, je crois que tu veux, au cours de la saisie, que cette dernière soit complétée avec ce qui se rapproche le plus dans une liste ?
Dans ce cas, il faut plutôt passer par un formatter... Je teste ça et je te tiens au courant.
.
control:textView:completions:forPartialWordRange:indexOfSelectedItem:
où faut-il l'implémenter? Faut-il subclasser NSTextField? où faut-il appeler la method? Vraiment, pour l'instant, je nage...
Ensuite, tu implémentes la méthodes.
La méthode delegate que je t'ai donné te permet de modifier le contenu de cette liste afin de fournir tes propres propositions.
Donc, dans IB, tu tires un "trait" entre ton NSTextField et ton contrôleur et tu connectes à delegate (dans la fenêtre d'Infos). Ensuite, dans XCode, tu implémentes la méthode delegate que je t'ai donné plus haut.
Par exemple, cette implémentation retourne une liste qui sera constituée de 3 expressions :
[tt]
- (NSArray *)control:(NSControl *)control textView:(NSTextView *)textView
       completions:(NSArray *)words forPartialWordRange:(NSRange)charRange
indexOfSelectedItem:(int *)index
{
  return [NSArray arrayWithObjects:@mot 1, @mot 2, @mot 3, nil];
}
[/tt]
A toi de modifier ce NSArray de 3 mots afin de retourner tes propres expressions en fonction de ce que tu veux faire...
.
Encore mil merci
Oui et non.
En fait, pour pouvoir avoir la liste de proposition au fur et à mesure de la frappe, je penche sur l'utilisation d'une sous-classe à NSFormatter.
J'ai presque terminé l'implémentation de cette classe : je la mettrais ici dès sa finalisation.
.
J'ai fait un petit truc sans prétention, mais ça marche.
Il s'agit d'une classe dérivée de NSFormatter (nommé AutoCompleteFormatter) dont le but est de mémoriser une liste d'expression, et ensuite de compléter automatiquement la saisie en cours dans un NSTextField en fonction de ce qui est mémorisée dans la liste.
Le fonctionnement est simple :
- le contrôleur dans son awakeFromNib positionne le formatter AutoCompleteFormatter dans le champ NSTextField (que j'ai nommé textField).
- le contrôleur est delegate du champ NSTextfield afin de récupérer les valeurs saisies dans le champ. Ceci permet de mémoriser dans le formatter (méthode addString:) la saisie.
fichier controleur.h :
fichier controleur.m :
.
fichier AutoCompleteFormatter.m :
.
if (origSelRange.location+origSelRange.length==[origString length]) && proposedSelRangePtr->location > origSelRange.location)
pour permettre d'effacer ou de changer la sélection lorsque un texte a été trouvé.
Mil merci et à une prochaine, pour d'autres requêtes!!! :kicking: