2009-07-22 6 views
1

J'utilise objective-c & iphone 3.0 sdkUIActivityIndicatorView marche/arrêt avant et après la demande page web

Je veux récupérer le contenu d'une URL (page web ou pdf) et l'afficher dans un UIWebView

il semble que la chose à faire est quelque chose comme ceci:

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

cela fonctionne très bien, sauf pour 1 chose.

Il existe des cas où la demande prend un certain temps (disons 5-10 secondes). J'ai un UIActivityIndicatorView que je voudrais "commencer" et "arrêter" au début et à la fin de la demande de chargement.

Cependant, si je le fais

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

cela ne fonctionne pas parce que l'appel loadRequest est fait de manière asynchrone et mon UIActivityIndicatorView arrête presque immédiatement

est-il un moyen de marche/arrêt mon "busySignal" au début et à la fin d'une demande d'URL?

Comme alternative, je pense cela peut se faire via NSURLConnection qui me donne la fonction de rappel « connectionDidFinishLoading: »

mais je ne peux pas sembler comprendre comment aller de NSURLConnection pour afficher le web -page.

Donc, je suppose que c'est 2 questions.

1. Pouvez-vous démarrer/arrêter un UIActivityIndicatorView au début/à la fin d'un appel à loadRequest:? 2. Comment utiliser NSURLConnection pour récupérer le contenu d'une URL et afficher les informations sur un UIWebView?

Merci!

+0

vous êtes un prince! – user141146

Répondre

5

Tu ne veux vraiment pas faire la charge de manière synchrone là, Si vous le faites, votre interface utilisateur se bloquera pendant plusieurs secondes pendant le chargement. Si votre boucle d'exécution principale s'arrête trop longtemps (connexion Internet lente), le système supposera que vous avez planté et tué votre application.

Vous souhaitez utiliser les méthodes UIWebViewDelegate pour être informé quand il fait quelque chose. Par exemple:

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

puis en vous mettre en œuvre les méthodes de délégué suivantes:

//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

Regardez le protocole UIWebViewDelegate devrait avoir ce que u besoin, il a requestdidstart le chargement et ces méthodes qui sont là pour exacty ce que tu veux faire