2011-04-02 5 views
0

J'ai dans mon programme un champ de texte qui représente un nom de fichier d'un objet modèle en utilisant des liaisons. Je veux que ce textField puisse être utilisé pour entrer un nouveau nomFichier et après que l'utilisateur appuie sur Entrée, il doit envoyer le message à mon objet modèle que la valeur de nomDeFichier a changé dans mon objet textField, puis dans mon objet modèle la méthode pour vérifier si un tel nom de fichier peut être utilisé est appelé. Et si elle retourne true, alors elle devrait appliquer une nouvelle valeur à mon objet modèle, sinon, alors la valeur dans mon textField devrait se défaire à la valeur initiale.Valider le texte dans TextField

Est-ce que quelqu'un sait comment cela pourrait être implémenté? Je peux valider ma valeur, mais je ne peux pas faire en sorte que mon objet textField soit actualisé. En ce qui concerne à la fois la modification de la valeur de l'objet du modèle, et l'actualisation de texField devrait être utilisée seule méthode qui est compatible KVC Je ne sais pas comment mettre en œuvre un tel comportement.

Toute aide serait très appréciée.

+0

La méthode vérifie-t-elle la vérification de la présence de caractères non valides ou la vérification de l'identité du nom de fichier? Par exemple, pas un doublon. –

+0

Il vérifie si le nom est unique ... – BartoNaz

Répondre

1

Cela ne me semble pas un bon UX; en tant qu'utilisateur, je serais fâché de constater que si je faisais une simple faute de frappe dans un champ de texte, il effacait complètement ce que je venais d'entrer. Ce serait mieux de montrer un message indiquant ce qui n'allait pas et comment l'utilisateur peut le réparer. Néanmoins ...

Je pense que vous devriez mettre en place un délégué de champ de texte. Demandez au délégué de conserver une variable contenant la dernière chaîne valide qui a été entrée. Ensuite, dans textFieldShouldEndEditing:, vérifiez votre validité et, si la vérification échoue, définissez la valeur du champ de texte sur cette variable et renvoyez NO. Si c'est le cas, changez la variable pour contenir la nouvelle chaîne valide et renvoyez YES.

+0

Vous avez raison de montrer le message d'erreur, mais ce sont des détails. Je ne savais pas comment mettre cette vérification à l'intérieur de la liaison. L'idée de déléguer sonne bien, mais je ne les connais pas très bien. En fait, la valeur de textField est liée à un objet dans le tableau, donc textField est lié à arrayController.selection.fileName. utiliser delegate me permet de coordonner ma liaison par programme, est-ce que je la comprends correctement? – BartoNaz

+0

Il ne devrait pas y avoir de problème pour combiner des méthodes déléguées avec des liaisons. Généralement, les méthodes déléguées sont des moyens de personnaliser légèrement le comportement d'une classe (souvent un élément d'interface utilisateur) sans avoir à se préoccuper du sous-classement. L'idée est que l'objet demande à son délégué des permissions ou des commentaires sur diverses actions, de sorte que vous pouvez, par exemple, empêcher un utilisateur de tabuler hors d'un champ de texte si l'entrée n'est pas utile. –

+0

Cela semble intéressant. J'étudierai plus sur les délégués pour l'utiliser. Merci pour votre aide ... – BartoNaz

Questions connexes