| |
Posté le 27 juillet 2012 - 17:56 |
Bonjour,
J'ai dans mon application IOS un champ de saisie qui permet de filtrer les éléments d'une zone répétée. Quand je tape "sav", il me remplace par "sac" si je fais "rechercher" par le bouton clavier.
Je souhaiterais désactiver le correcteur orthographe de l'Iphone sur ce champ. Est-ce possible ?
Merci |
| |
| |
| | | |
|
| | |
| |
Posté le 30 juillet 2012 - 16:20 |
Non, apparemment pas disponible actuellement. La demander au ST pour l'avoir peut être en 18. |
| |
| |
| | | |
|
| | |
| |
Posté le 30 juillet 2012 - 16:21 |
Salut Franck,
tu vas dans réglages -> géneral -> clavier -> autocorrection.
Cordialement, Joseph. |
| |
| |
| | | |
|
| | |
| |
Posté le 30 juillet 2012 - 16:46 |
Oui mais dans le cas présent, je veux juste le désactiver pour ce champ et pas pas pour toutes les apps de l'IPhone... |
| |
| |
| | | |
|
| | |
| |
Posté le 31 juillet 2012 - 10:28 |
Je me réponds à moi-même : j'ai trouvé sur un forum la solution en objective C :
UITextField* f = [[UITextField alloc] init]; f.autocorrectionType = UITextAutocorrectionTypeNo;
Je sais qu'il est possible de saisir du code Objective C dans WM mais un spécialiste pourrait-il me dire ou coder ces 2 lignes ?
Merci de votre aide |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 56 messages |
|
Posté le 31 juillet 2012 - 11:19 |
Le truc c'est de prendre en compte un champs Windev et lui modifier des caractéristiques en Objective-c.
Personnellement je tenterais la chose suivante.
Créer une procédure en Objective-c qui aurait comme code :
void IOS_AutoCorrection(void *CurrentField) { CurrentField.autocorrectionType=UITextAutocorrectionTypeNo; }
Puis en Windev à l'initialisation de la fenêtre comprenant le champs.
SI PAS EnModeTest() ALORS IOS_AutoCorrection(Handle(VOTRECHAMPSWD)) FIN
Etant donnée que la première ligne sert à allouer de la mémoire et l'initialiser. Pourquoi le "SI PAS EnModeTest()", tout simplement que ce bout de code ne fonctionnera que sur l'iPhone.
Je vous demanderais si vous testez ceci, de nous envoyer le retour. De mon côté je vais vérifier le fonctionnement aussi mais plus tard dans la journée. |
| |
| |
| | | |
|
| | |
| |
Posté le 31 juillet 2012 - 15:40 |
Merci de ta réponse J'ai essayé ta solution mais cela ne compile pas dans XCode ! Semantic issue : Member reference base type 'void' is not a structure or union |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 56 messages |
|
Posté le 01 août 2012 - 12:02 |
Rajoutez dans la fonction globale objective-c et au dessus du void pour voir :
#import <UIKit/UIKit.h>
|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 950 messages Popularité : +11 (13 votes) |
|
Posté le 01 août 2012 - 13:12 |
Bonjour,
Il semblerait que le probleme void vienne de la declaration du handle ? Void *CurrentFiels est-elle la bonne syntaxe ?
Vincent
Ps : si vous avez aussi du code pour selectionner le texte du champ, je duis preneur |
| |
| |
| | | |
|
| | |
| |
Posté le 01 août 2012 - 13:42 |
J'avais déjà pensé à rajouter l'import mais ça ne résout pas le problème... |
| |
| |
| | | |
|
| | |
| |
Posté le 02 août 2012 - 10:28 |
Bon alors, j'essaie d'avancer par tâtonnement...
Le code suivant compile maintenant dans XCode :
void IOS_AutoCorrection(void* nHandleChampWM) { UITextField* ChampWM = (UITextField*)nHandleChampWM; IF (ChampWM) { ChampWM.autocorrectionType=UITextAutocorrectionTypeNo; } }
Mais cela ne fonctionne pas !
Dans la trace d'XCode, il m'affiche le log suivant en exécution :
[CIOSGenericScrollDispatcher setAutocorrectionType:]: unrecognized selector sent to instance 0x14d4d50 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 950 messages Popularité : +11 (13 votes) |
|
Posté le 02 août 2012 - 10:48 |
Bonjour,
J'ai fait la même chose mais avec UITextView ( champ multilingue), ça ne marche pas non plus et même message d'erreur.
J'ai aussi essayé décrire dans le champ, ça ne marche pas. Le handle renvoyé par WM est-il le bon ? Peut-être est-ce celui de la fenêtre et non du champ.
Ob |
| |
| |
| | | |
|
| | |
| |
Posté le 02 août 2012 - 12:07 |
Effectivement, je soupçonne également que ce soit la fonction Handle() qui pose problème !
J'ai soumis un ticket au ST pour voir ce qu'il en est...
D'autre développeurs ont-ils déjà utilisé la fonction Handle avec un champ de saisie ?? |
| |
| |
| | | |
|
| | |
| |
Posté le 02 août 2012 - 12:37 |
La doc de WM précise bien que la fonction Handle retourne uniquement le UIView associé à la fenêtre.
Mais il doit-être possible de retrouver un champ précis de type UITextField parmi les subviews de la fenêtre ?
Je vais poursuivre dans cette voie... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 56 messages |
|
Posté le 02 août 2012 - 13:33 |
Le handle renvoi l'id du champs. Donc il faut taper le code dans Obj-C comme si vous aviez uniquement l'id et non pas le nom de la variable declaré. Essayer dans le code ObjetiveC :
void IOS_AutoCorrection(void *CurrentField) { [CurrentField UITextAutocorrectionTypeNo]; } |
| |
| |
| | | |
|
| | |
| |
Posté le 02 août 2012 - 16:24 |
Bon, j'ai finalement trouvé la solution !
1 - il faut bien utiliser la fonction Handle avec le nom du champ de saisie. Donc par exemple, il faut appeler la procédure IOS_AutoCorrection de cette manière dans le traitement d'initialisation du champ :
IOS_AutoCorrection(Handle(champSaisie))
2 - Ensuite, dans la procédure Objective C IOS_AutoCorrection, il faut faire :
void IOS_AutoCorrection(void* nHandleChampWM) {
UIView* ChampWM = (UIView*)nHandleChampWM; IF (ChampWM) {
for (UIView *view IN [ChampWM subviews]) {
IF ([view isKindOfClass:[UITextField class]]) { UITextField *textField = (UITextField *)view; textField.autocorrectionType = UITextAutocorrectionTypeNo; } } } }
En fait le premier UIView récupéré n'est pas un UITextField. Il faut parcourir les subviews pour trouver le bon. J'imagine que c'est lié au framework développé par PCSoft qui encapsule les objets natifs dans leurs propres objets.
Il y a certainement moyen d'optimiser ce code (je ne suis pas spécialiste Objective C) mais en tout cas, il fonctionne..
Au passage, il existe également la propriété autocapitalizationType qui permet en fonction de la valeur de paramétrer la gestion des majuscules dans le champ. Le code suivant permet par exemple, de ne pas avoir par défaut le CAPSLOCK enfoncé :
textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
Bon dev |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 950 messages Popularité : +11 (13 votes) |
|
Posté le 02 août 2012 - 16:33 |
Désolé, ça ne marche pas non plus et il y a n : Revivre type void Is ont id or interface pointer, considère casting it to id |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 950 messages Popularité : +11 (13 votes) |
|
Posté le 02 août 2012 - 16:34 |
Mon messag est passe avant la proposition de nouvelle solution ! |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 950 messages Popularité : +11 (13 votes) |
|
Posté le 02 août 2012 - 16:57 |
Encore merci,
Mais de mon côté sa crie au niveau du for, je ne sais pas s'il manquen un crochet ou un point virgule ou autre ....
Ob |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 950 messages Popularité : +11 (13 votes) |
|
Posté le 02 août 2012 - 17:09 |
C'est ok, encore merci pour ton code ! Le IN doit être en minuscule : in
De mon côté, j'utilise UITextView et ça marche bien ....
Merci
Ob |
| |
| |
| | | |
|
| | |
| |
Posté le 02 août 2012 - 17:52 |
J'ai l’impression que c'est la balise code qui met tous les mots clés en majuscule. Il doit croire que c'est du code Windev.... |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 56 messages |
|
Posté le 02 août 2012 - 19:40 |
Haaaaaaaaaaaaaaaaaaa, Franck BASSIN merci beaucoup, depuis que j'ai lu ton code, beaucoup de chose m'ont parut clair et depuis je peux apporter mes codes objective-c et répondre a des problèmes (comme les erreurs d'accès mémoire sur les champs HTML ou les champs FenêtreInternes ou encore la gestion des ascenseurs).
D'ailleurs en objective-c, si vous faites un NSLog(@"%@",[UnHandleDeChamps description]); Vous pourrez vous rendre compte que le type est une frame. Ce qui signifie que Windev créer pour chaque Objet une frame et ajoute en subview l'objet. Je m'explique :
Si vous créez un champsHTML dans xCode cela serait représenter par un UIWebView. Seulement Windev Créer une frame de la taille du champs et ajoute dedans une UIWebView.
Dans notre cas présent pourquoi ça ne marché pas. Tout simplement parceque nous essayons de mettre l'attribut pour arrêter la correction automatique sur une frame au lieu du champs, il suffit juste de descendre d'un niveau. Donc nous pouvons simplifiez le code.
Merci encore. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 155 messages |
|
Posté le 04 mai 2014 - 15:17 |
Merci également Ca m'a permis de comprendre un peu plus la liaison WL <=> ObjC. |
| |
| |
| | | |
|
| | |