Le défilement d'UIWebView après la mise au point du champ de text

J'ai UIView et UIWebView à l'écran. Lorsque je clique sur le champ de text du site Web, le contenu de la vue Web augmente. Comment pourrais-je forcer UIView à bouger ainsi?

Vous pouvez vous abonner à UIKeyboardWillShowNotification ou UIKeyboardDidShowNotification , et déplacer votre UIView lorsque vous recevez la notification. Ce process est décrit ici:

Texte, Web et Guide de programmation d'édition pour iOS : «Déplacement du contenu situé sous le keyboard»

Peut-être que cela aide: je ne voulais pas que l'UIWebView défile, y compris en se concentrant sur un champ de text.

Vous devez être le délégué de l'UIWebView:

 _webView.scrollView.delegate = self; 

Et puis ajoutez cette méthode

 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { scrollView.contentOffset = CGPointZero; } 

UIWebView a un callback:

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 

Ceci est déclenché chaque fois qu'une nouvelle request d'URL est sur le sharepoint se charger. De javascript, vous pouvez triggersr une nouvelle URL de request sur l'événement onfocus de la balise, avec un schéma personnalisé comme:

 window.location = "webViewCallback://somefunction"; 

Voici un script pour mettre votre événement personnalisé à l'intérieur de n'importe quelle page html à charger.

Vous devrez get tout le code HTML avant de le charger sur l'UIWebView comme ceci:

 NSSsortingng *html = [NSSsortingng ssortingngWithContentsOfURL:[NSURL URLWithSsortingng:@"your URL"] encoding:NSUTF8SsortingngEncoding error:nil]; 

Ensuite, insérez ce qui suit à l'intérieur du text HTML dans un endroit approprié:

 <script> var inputs = document.getElementsByTagName('input'); for(int i = 0; i < inputs.length; i++) { if(inputs[i].type = "text") { inputs[i].onfocus += "javascript:sortingggerCallback()"; } } function sortingggerCallback() { window.location = "webViewCallback://somefunction"; } </script> 

Ensuite, sur le callback, vous devriez faire quelque chose comme ceci:

 -(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType { if ( [[inRequest URL] scheme] == @"webViewCallback" ) { //Change the views position return NO; } return YES; } 

C'est tout. J'espère que cela aide.

Wow, j'ai eu le même problème il y a quelques jours, c'était vraiment énervant. J'ai compris que window.yPageOffset est en train de changer, mais pour autant que je sache, il n'y a pas d'events à lier quand ça change. Mais peut-être que cela vous aidera d'une manière ou d'une autre. 😉

Je pense que vous avez écrasé scrollViewDidScroll . Vous devez implémenter une class personnalisée pour UIWevView et replace scrollViewDidScroll :

  - (void) scrollViewDidScroll:(UIScrollView *)scrollView{ [super scrollViewDidScroll:scrollView]; [((id<UIScrollViewDelegate>)self.delegate) scrollViewDidScroll:scrollView]; }