2009-04-27 15 views
3

Je travaille sur une application avec un UIWebView intégré.Comment annuler une modification de champ de texte dans un UIWebView?

L'utilisateur a la possibilité d'entrer un emplacement dans un champ de texte dans la vue Web, mais un effort est également fait pour découvrir l'emplacement actuel à l'aide de l'emplacement principal.

Si l'emplacement principal fournit une réponse précise et que l'utilisateur est en train de modifier l'emplacement, je souhaite annuler l'édition et remplir le champ d'emplacement par programmation. Ceci est basé sur l'hypothèse que la grande majorité du temps, l'utilisateur voudra utiliser leur emplacement actuel et s'ils modifient le champ, ils préfèrent qu'il soit auto-peuplé que d'avoir fini d'entrer leur emplacement.

Ma question est la suivante: comment annuler une modification dans un UIWebView? Si c'était un champ de saisie de texte normal, je le forcerais à démissionner du premier répondeur et le clavier disparaîtrait, mais je ne sais pas comment le faire avec un UIWebView. L'envoi de resignFirstResponder à la vue Web ne le fait pas.

Y at-il quelque chose qui peut être fait en utilisant Javascript et stringByEvaluatingJavaScriptFromString: sur le web? Y a-t-il un autre moyen?

Répondre

1

Votre meilleur pari est l'approche Javascript, regardez dans les valeurs de focus du champ de formulaire et voyez si vous pouvez le faire perdre le focus.

Il ressemble à ce que vous voudrez peut-être est:

window.blur(); 
+0

Kendall, merci beaucoup pour votre réponse, malheureusement, cela ne semble pas fonctionner. J'ai essayé 'NSLog (@ "javascript résultat% @", [mainWebView stringByEvaluatingJavaScriptFromString: @ "window.blur();"]);' pendant l'édition et le clavier est resté debout et aucune erreur n'a été imprimée. Pouvez-vous penser à autre chose à essayer? – oldbeamer

1

Donc, l'astuce est d'utiliser « flou() », mais seulement sur le terrain qui est sélectionné, pas toute la fenêtre.

Le code suivant fait l'affaire si 'soi' est une sous-classe de UIWebView:

[self stringByEvaluatingJavaScriptFromString:@"document.getElementsByName('textField')[0].blur();"]; 
2
[webView stringByEvaluatingJavaScriptFromString:@"document.activeElement.blur();"]; 
7

utiliser seulement [webView endEditing: OUI];

+0

Vous avez besoin de + 1 pour ça! Cela a fonctionné – MobileOverlord

Questions connexes