Je suis très novice en matière de programmation et je me demandais s'il existait un moyen d'effacer le contenu d'un fichier de type UIWebView
dans la programmation iphone, afin que le symbole de chargement de la vue suivante ne s'affiche pas devant la dernière vue. Merci beaucoup, Thomas
Réponses
Trop de publicités?Extension de la réponse à des fins de documentation pour peut-être aider quelqu'un d'autre :
J'ai eu le même désir (effacer le contenu avant de charger l'url suivante) mais j'avais un délégué UIWebView configuré pour recevoir webviewDidFinishLoad:(UIWebView)webview
et mettre à jour une autre partie de l'interface utilisateur en réponse.
Problème : l'appel pour effacer le contenu à également a appelé la méthode du délégué, et a donc reçu des faux coups (c'est-à-dire qu'il a reçu un appel lorsque l'effacement a été effectué, mais le délégué est codé pour ne s'attendre à être appelé que lorsque le contenu réel est chargé).
Solution : utiliser une URL connue pour le clair, et avoir webviewDidFinishLoad:
ignorer les appels effectués lorsque cette URL est terminée :
- (void) startLoadOfNextURL:(NSURL*)url
{
// clear:
[self.webView loadHTMLString:@"" baseURL:nil];
// Load real next URL
NSURLRequest* request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSLog(@"WebView finished loading: %@", webView);
if ([self.webView.request.URL.absoluteString isEqualToString:@"about:blank"]) {
NSLog(@" This is Blank. Ignoring as false event.");
}
else {
NSLog(@" This is a real url");
[self updateUIInSomeWay];
}
}
Note : en utilisant ceci :
[self.webView loadHTMLString:@"about:blank" baseURL:nil];
fait en réalité apparaître les mots "about:blank" sous forme de texte dans le volet de contenu de la vue Web !
Dernière complication : En pratique, avec mes deux [webview load...]
si rapprochés, je constatais qu'au lieu d'un événement "chargé" pour le clear, le webview l'annulait en fait en faveur de la deuxième requête et appelait webView: didFailLoadWithError:
pour la première demande de chargement. Ainsi, j'ai dû mettre un code similaire dans cet événement :
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
NSLog(@"WebView error on: %@", webView);
NSLog(@"Error is: %@", error);
NSURL* failingURL = [error.userInfo objectForKey:@"NSErrorFailingURLKey"];
if ([failingURL.absoluteString isEqualToString:@"about:blank"]) {
NSLog(@" This is Blank. Ignoring.");
}
else {
NSLog(@" This is a real URL.");
[self doSomethingAboutError];
}
}
- Réponses précédentes
- Plus de réponses