Comment utiliser UIProgressView lors du chargement d'un UIWebView?
je développe une application où je suis le chargement d'un urlrequest dans la UIWebView et il s'est passé avec succès.
Mais maintenant j'essaie d'afficher un UIProgressView lorsque le chargement est en cours( à partir de 0.0 à 1.0), qui est modifiée de manière dynamique avec les progrès de chargement.
Comment puis-je le faire?
source d'informationauteur raaz | 2009-12-14
Vous devez vous connecter pour publier un commentaire.
UIWebView ne pas vous donner des informations sur la progression dans le mode normal. Ce que vous devez faire est d'abord récupérer vos données de manière asynchrone à l'aide d'un NSURLConnection.
Lorsque le NSURLConnection délégué méthode
connection:didReceiveResponse
, vous allez prendre le nombre que vous obtenez à partirexpectedContentLength
et de l'utiliser comme valeur max. Puis, à l'intérieur de la méthode du déléguéconnection:didReceiveData
, vous allez utiliser lalength
propriété de la NSData exemple pour vous dire combien de temps vous êtes, de sorte que votre progrès fraction seralength /maxLength
, normalisée entre 0.0 et 1.0.Enfin, vous allez init la webview avec des données au lieu d'une URL (dans votre
connection:didFinishLoading
délégué de la méthode).Deux mises en garde:
Il est possible que le
expectedContentLength
propriété de la NSURLResponse va être -1 (NSURLReponseUnknownLength
constante). Dans ce cas, je vous suggère de jeter un standard UIActivityIndicator que vous coupez à l'intérieur deconnection:didFinishLoading
.Assurez-vous que chaque fois que vous manipulez un contrôle visible à partir de l'une des NSURLConnection délégué méthodes, vous le faire en appelant
performSelectorOnMainThread:
- sinon, vous allez commencer à obtenir le redoutable EXC_BAD_ACCESS erreurs.En utilisant cette technique, vous pouvez afficher une barre de progression lorsque vous connaissez la quantité de données que vous êtes censé obtenir, et un compteur lorsque vous ne savez pas.
Vous pouvez essayer d'utiliser cette sous-classe de UIWebView qui utilise le privé UIWebView méthodes - par conséquent, cette solution n'est pas à 100% AppStore coffre-fort (bien que certaines applications ne presque 100% l'utiliser: Facebook, Google app, ...).
https://github.com/petr-inmite/imtwebview
À l'aide de NSURLConnection l'extraction de deux fois les mêmes données,perte de temps, car il peut ralentir l'interaction de l'utilisateur chargement des données deux fois ,consomme de données internet.Il est préférable de faire un uiprogress basé sur minuterie et lorsque la webview avec succès chargé la page web, il va montrer la uiprogress chargement.dans ce cas, vous pouvez montrer une dynamique uiprogress chaque fois que la page est chargée.. n'oubliez pas de créer une uiprogress vue et l'a nommé myProgressview et du propriétaire du fichier.
VOICI LE CODE ESPÈRE QUE CELA AIDE