UIWebView gibt Ihnen im normalen Modus keine Fortschrittsinformationen. Sie müssen Ihre Daten zunächst asynchron über eine NSURLConnection abrufen. Wenn die NSURLConnection Delegate-Methode connection:didReceiveResponse
nehmen Sie die Nummer, die Sie von expectedContentLength
und verwenden Sie diesen Wert als Ihren Höchstwert. Dann, innerhalb der Delegatenmethode connection:didReceiveData
verwenden Sie die Option length
Eigenschaft der NSData-Instanz, um Ihnen mitzuteilen, wie weit Sie fortgeschritten sind, so dass Ihr Fortschrittsanteil length / maxLength
auf einen Wert zwischen 0,0 und 1,0 normiert.
Schließlich werden Sie die Webansicht mit Daten anstelle einer URL initiieren (in Ihrem connection:didFinishLoading
Delegate-Methode).
Zwei Vorbehalte:
-
Es ist möglich, dass die expectedContentLength
Eigenschaft der NSURLResponse wird sein -1 ( NSURLReponseUnknownLength
konstant). In diesem Fall würde ich vorschlagen, werfen einen Standard UIActivityIndicator, die Sie in abschalten connection:didFinishLoading
.
-
Stellen Sie sicher, dass Sie jedes Mal, wenn Sie ein sichtbares Steuerelement von einer der NSURLConnection-Delegate-Methoden manipulieren, dies durch den Aufruf performSelectorOnMainThread:
- Andernfalls werden Sie die gefürchteten EXC_BAD_ACCESS-Fehler erhalten.
Mit dieser Technik können Sie einen Fortschrittsbalken anzeigen, wenn Sie wissen, wie viele Daten Sie erhalten sollen, und einen Spinner, wenn Sie es nicht wissen.