2010-11-12 4 views
8

J'ai un UIWebView avec un élément html <input type="text"/> dedans. Je veux focaliser l'élément d'entrée dans le code HTML et afficher le clavier sur l'iPhone par programme, sans appuyer sur l'écran.iPhone UIWebView devenirFirstResponder

J'ai essayé ce qui suit:

  • mis l'accent à partir de JavaScript (dans ce cas, l'événement onFocus JS se déclenche, mais le clavier ne sera pas affiché)
  • [webView becomeFirstresponder] (retours NO)
  • mis la première sous-vue du webView être les firstResponder (retours NO)
  • sous-classe UIWebView retourner OUI à canBecomeFirstResponder: (rien ne se passe)

J'essaye de trouver la solution depuis hier mais je n'ai pas pu la trouver. S'il vous plaît aider.

+0

avez-vous trouvé une solution pour cela? La seule façon que j'ai trouvé est d'émuler par programme un clic sur le WebView. Mais mon application peut être rejetée à cause de cela ... :( – Dmitry

+2

Depuis iOS 6, vous pouvez utiliser [keyboardDisplayRequiresUserAction] (http://developer.apple.com/library/ios/#documentation/uikit/reference/UIWebView_Class/Reference /Reference.html) pour le faire – catlan

+0

Je ne sais pas comment vous avez réussi à créer ce problème mais, normalement, il faut utiliser le paramètre "firstFirstResponder" comme je l'ai décrit dans mon article: http://bcaccinolo.wordpress.com/2010/ 12/28/uitextfield-with-the-keyboard-automagically/ –

Répondre

0

Avez-vous essayé? N'oubliez pas de câbler la connexion de délégué de UIWebView, et idéalement n'exécuter le javascript que lorsque cela est nécessaire.

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"theElementId\").setFocus();"]; 
} 
1

En iOS6 ou au-dessus, vous devez définir keyboardDisplayRequiresUserAction-NO premier:

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    webView.keyboardDisplayRequiresUserAction = NO; 
    [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"theElementId\").setFocus();"]; 
}