web-dev-qa-db-fra.com

UIWebView webViewDidFinishLoad ne s'appelle pas iOS

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

25
Ekra

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];
}
24
SayeedHussain

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.

8
CharlieMezak

Délégués WebView

  1. Télécharger MBProgessHUD 
  2. Ajouter à votre projet 
  3. Quand la page commence à charger, le chargement (*) commence et se cache après le chargement

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];
}
3
Prithivi

Probablement il rencontre une erreur. Implémentez –webView:didFailLoadWithError: et vérifiez.

2

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.

2
woakley5

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;
}
0
Gami Nilesh