Je charge un fichier depuis le répertoire du document en utilisant UIWebView. J'ai défini le délégué de UIWebView et je réponds à 2 méthodes de délégué qui sont webViewDidStartLoad
et webViewDidFinishLoad
Je reçois la webViewDidStartLoad
Mais je ne reçois pas la méthode webViewDidFinishLoad
.
Ci-dessous le code:
@interface MyView: UIViewController <UIWebViewDelegate> {
UIWebView *webView;
}
@property (nonatomic, retain) UIWebView *webView;
========================= Class ===========================
-(void)viewDidLoad {
CGRect webFrame = [[UIScreen mainScreen] applicationFrame];
mWebView = [[UIWebView alloc] initWithFrame:webFrame];
mWebView.delegate = self;
mWebView.scalesPageToFit = YES;
[self.view addSubview:mWebView];
NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", pathString]];
[mWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]] ];
}
// Delegate methods
-(void)webViewDidStartLoad:(UIWebView *)webView {
NSLog(@"start");
}
-(void)webViewDidFinishLoad:(UIWebView *)webView {
NSLog(@"finish");
}
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
NSLog(@"Error for WEBVIEW: %@", [error description]);
}
S'il vous plaît laissez-moi savoir ce qui ne va pas. Je ne reçois aucune erreur dans la méthode déléguée didFailLoadWithError.
Remarque : - le fichier que je charge est énorme, disons 3 Mo.
Merci
============= EDITED ==================
Comme je chargeais un très gros fichier, le délégué arrivait après une très longue durée que je n'ai pas pu remarquer mais pour les petits fichiers, tout fonctionne bien
Hey, tu devrais probablement faire ça,
-(void)viewDidLoad {
//webView alloc and add to view
CGRect webFrame = [[UIScreen mainScreen] applicationFrame];
mWebView = [[UIWebView alloc] initWithFrame:webFrame];
mWebView.delegate = self;
mWebView.scalesPageToFit = YES;
[self.view addSubview:mWebView];
//path of local html file present in documentsDirectory
NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", pathString]];
//load file into webView
[mWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]] ];
//show activity indicator
[self showActivityIndicator]
}
Appelez la méthode removeLoadingView dans les méthodes UIWebViewDelegate suivantes
-(void)webViewDidFinishLoad:(UIWebView *)webView {
[self removeLoadingView];
NSLog(@"finish");
}
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
[self removeLoadingView];
NSLog(@"Error for WEBVIEW: %@", [error description]);
}
La méthode showActivityIndicator
-(void) showActivityIndicator
{
//Add a UIView in your .h and give it the same property as you have given to your webView.
//Also ensure that you synthesize these properties on top of your implementation file
loadingView = [UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]
loadingView.alpha = 0.5;
//Create and add a spinner to loadingView in the center and animate it. Then add this loadingView to self.View using
[self.view addSubView:loadingView];
}
La méthode removeLoadingView
-(void) removeLoadingView
{
[loadingView removeFromSuperView];
}
Eh bien, votre vue Web termine-t-elle le chargement? Vous devez également implémenter le webView:didFailLoadWithError:
pour détecter les échecs.
Puisque vous n'obtenez ni le message d'échec ni le message de réussite. Il se peut que les données que vous essayez de charger présentent un problème.
Essayez de demander à la WebView de charger une chaîne HTML ("Hello World!") Et voyez si cela réussit. Si tel est le cas, le problème provient de votre ressource de données ou de son chemin d'accès.
Délégués WebView
Fichier .h
@interface WebViewViewController : UIViewController <MBProgressHUDDelegate, UIWebViewDelegate>
{
MBProgressHUD *HUD;
}
Fichier .m
- (void)webViewDidStartLoad:(UIWebView *)webView
{
HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
[self.navigationController.view addSubview:HUD];
HUD.delegate = self;
HUD.labelText = @"Loading";
[HUD show:YES];
}
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
[HUD hide:YES];
}
Probablement il rencontre une erreur. Implémentez –webView:didFailLoadWithError:
et vérifiez.
Veillez à implémenter delegate () dans le fichier .h de la vue et connectez le délégué à la vue. Cela a résolu le problème pour moi.
Fichier .h
@property (retain, nonatomic) IBOutlet UIWebView *webview;
fichier .m
-(void)viewDidLoad {
NSString *urlAddress = @"YOUR_URL";
_webview.scalesPageToFit = YES;
//Create a URL object.
NSURL *url = [NSURL URLWithString:urlAddress];
//URL Requst Object
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
//Load the request in the UIWebView.
[_webview loadRequest:requestObj];
}
- (void)webViewDidStartLoad:(UIWebView *)webView;
{
[self.indicater_web startAnimating];
}
//a web view starts loading
- (void)webViewDidFinishLoad:(UIWebView *)webView;
{
[self.indicater_web stopAnimating];
}
//web view finishes loading
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;
{
[self.indicater_web stopAnimating];
}
- (BOOL)webView:(UIWebView *)wv shouldStartLoadWithRequest:(NSURLRequest *)rq
{
[self.indicater_web startAnimating];
return YES;
}