2009-02-25 9 views
1

Il est parfois utile de forcer la fin des modifications en cours. Par exemple, si l'utilisateur tape une valeur dans un champ de mon document, puis clique sur la fenêtre d'aperçu, ou choisit "Imprimer" ou "Enregistrer" dans le menu. Le problème est qu'en forçant la fin de l'édition (soit en demandant à NSWindow de se rendre lui-même premier répondeur, soit en appelant endEditingFor: sur la fenêtre), le focus du premier répondeur n'est plus sur le champ en question. Cela perturbe l'utilisateur dans certaines situations, où l'action est itérative et ne signifie pas la fin de son travail sur le document. Ma première tentative pour résoudre ceci est de faire attention quel que soit le firstResponder actuel, puis de le restaurer après avoir terminé l'édition, en utilisant "makeFirstResponder:" de NSWindow. Cela fonctionne bien, mais il a l'effet indésirable, par ex. sur NSTextFields de réinitialiser la sélection dans l'éditeur de champ sur toute la longueur du contenu de la chaîne.Puis-je terminer l'édition pour le contrôle de l'éditeur de champ sans perturber le focus?

Y at-il un truc que je peux utiliser pour forcer l'ensemble du système de méthodes "endEditing" à être appelé sans perturber l'éditeur de champ en cours?

Merci, Daniel

Répondre

3

Pourquoi ne pas utiliser votre méthode originale, mais aussi d'enregistrer où/ce que la plage de sélection ressemble et de le restaurer après la restauration du premier intervenant?

+0

Merci, c'est peut-être la meilleure chose à faire. Je vais voir comment ça se passe. – danielpunkass

+0

Ça fait l'affaire, merci. Je m'inquiétais d'attraper correctement les cas, mais à mes fins (principalement la restauration dans l'éditeur de champ pour le champ de texte ciblé), ce qui fonctionne très bien est d'obtenir l'attribut selectedRanges de l'éditeur de champ et setSelectedRanges: une fois terminé. – danielpunkass

0

Je suis d'accord que c'est la façon de le faire. Sur iPhone, il est particulièrement important de ne pas faire sauter le clavier de haut en bas à des moments inopportuns. Je l'ai utilisé:

[textView endEditing:YES]; 
[textView becomeFirstResponder]; 

avec succès pour compléter l'attente de correction d'orthographe (comme si un espace a été touché) avant d'agir sur le contenu d'un UITextView, mais sans effets secondaires.

Questions connexes