i am developing an application where i am loading a urlrequest in the UIWebView and it happened successfully.
But now i am trying to display a UIProgressView when the loading is in progress( starting from 0.0 to 1.0), which is changed dynamically with the progress of loading.
How can i do that?
UIWebView doesn’t give you any progress information in the normal mode. What you need to do is first fetch your data asynchronously using an NSURLConnection.
When the NSURLConnection delegate method
connection:didReceiveResponse, you’re going to take the number you get fromexpectedContentLengthand use that as your max value. Then, inside the delegate methodconnection:didReceiveData, you’re going to use thelengthproperty of the NSData instance to tell you how far along you are, so your progress fraction will belength / maxLength, normalized to between 0.0 and 1.0.Finally, you’re going to init the webview with data instead of a URL (in your
connection:didFinishLoadingdelegate method).Two caveats:
It is possible that the
expectedContentLengthproperty of the NSURLResponse is going to be -1 (NSURLReponseUnknownLengthconstant). In that case, I would suggest throwing up a standard UIActivityIndicator that you shut off insideconnection:didFinishLoading.Make sure that any time you manipulate a visible control from one of the NSURLConnection delegate methods, you do so by calling
performSelectorOnMainThread:– otherwise you’ll start getting the dreaded EXC_BAD_ACCESS errors.Using this technique, you can show a progress bar when you know how much data you’re supposed to get, and a spinner when you don’t know.