2009-07-22 7 views
1

Ich bin mit Objective-C & das iPhone 3.0 sdkUIActivityIndicatorView Start/Stopp vor und nach der Web-Seite Anfrage

ich den Inhalt einer URL (Webseite oder pdf) und zeigt sie in einem abrufen möchten UIWebView

es scheint, dass das, was zu tun so etwas wie diese:

NSURLRequest *requestObject = [NSURLRequest requestWithURL:myURL]; 
[myUIWebView loadRequest:requestObject]; 

dies ganz gut funktioniert, mit Ausnahme von 1 Sache.

Es gibt Fälle, in denen die Anfrage eine Weile dauert (sagen wir 5-10 Sekunden). Ich habe eine UIActivityIndicatorView, die ich am Anfang und Ende der Ladeanforderung "starten" und "stoppen" möchte.

jedoch, wenn ich diesen

[busySignal startAnimating]; 
NSURLRequest *requestObject = [NSURLRequest requestWithURL:myURL]; 
[myUIWebView loadRequest:requestObject]; 
[busySignal stopAnimating]; 

es nicht funktioniert, weil der Aufruf loadrequest asynchron ausgeführt wird und so mein UIActivityIndicatorView hält fast sofort

Gibt es eine Möglichkeit zu starten/stoppen mein "busySignal" am Anfang und am Ende einer URL-Anfrage?

Als Alternative ich denke, das über NSURLConnection getan werden kann, die mir die Callback-Funktion „connectionDidFinishLoading:“ gibt

aber ich kann nicht scheinen, um herauszufinden, wie man die Anzeige der Bahn von NSURLConnection gehen -Seite.

Also, ich denke das sind 2 Fragen.

1. Können Sie eine UIActivityIndicatorView am Anfang/Ende eines Aufrufs von loadRequest starten/stoppen:? 2. Wie verwenden Sie NSURLConnection, um den Inhalt einer URL abzurufen und die Informationen in einem UIWebView anzuzeigen?

Danke!

+0

du bist ein Prinz! – user141146

Antwort

5

Sie wirklich genau dort die Last synchron zu tun, nicht wollen, zu tun, Wenn Sie das tun, wird Ihre Benutzeroberfläche für mehrere Sekunden stauen, während Sie laden. Wenn Ihre Hauptlaufschleife zu lange stoppt (langsame Internetverbindung), geht das System davon aus, dass Sie abgestürzt sind und Ihre App beendet hat.

Sie möchten die UIWebViewDelegate-Methoden verwenden, um informiert zu werden, wenn etwas ausgeführt wird. Zum Beispiel:

myUIWebView.delegate = self; 
NSURLRequest *requestObject = [NSURLRequest requestWithURL:myURL]; 
[myUIWebView loadRequest:requestObject]; 

und dann in die folgenden Delegatmethoden implementieren:

//Called whenever the view starts loading something 
- (void)webViewDidStartLoad:(UIWebView *)webView { 
    [busySignal startAnimating]; 
} 

//Called whenever the view finished loading something 
- (void)webViewDidFinishLoad:(UIWebView *)webView_ { 
    [busySignal stopAnimating]; 
} 
0

Blick auf das UIWebViewDelegate Protokoll sollte, was u brauchen, es requestdidstart Laden und solche Methoden, die es für exacty was wollen u

Verwandte Themen