it-swarm.com.ru

UIWebView webViewDidFinishLoad не называется iOS

Я загружаю какой-то файл из каталога документов, используя UIWebView. Я установил делегата UIWebView, и я отвечаю на 2 метода делегата, которые являются webViewDidStartLoad и webViewDidFinishLoad Я получаю webViewDidStartLoad, но я не получаю метод webViewDidFinishLoad.

Ниже приведен код:

@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]);
}

Пожалуйста, дайте мне знать, что происходит не так. Я не получаю никакой ошибки в методе делегата didFailLoadWithError.

Примечание : - файл, который я загружаю, огромен, скажем, 3 МБ. 

Спасибо 

============= РЕДАКТИРОВАНИЕ ==================

Поскольку я загружал очень большой файл, делегат приходил через очень долгое время, которое я не смог заметить, но для небольших файлов все работает нормально

25
Ekra

Эй, наверное, ты должен сделать это,

-(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]
}

Вызовите метод removeLoadingView в следующих методах UIWebViewDelegate

-(void)webViewDidFinishLoad:(UIWebView *)webView {

  [self removeLoadingView];   
   NSLog(@"finish");   
}


-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {

    [self removeLoadingView];
    NSLog(@"Error for WEBVIEW: %@", [error description]);
}

Метод 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];
}

Метод removeLoadingView

-(void) removeLoadingView
{
   [loadingView removeFromSuperView];
}
24
SayeedHussain

Что ж, ваш веб-просмотр на самом деле заканчивает загрузку? Вы должны также реализовать webView:didFailLoadWithError:, чтобы ловить сбои.

Так как вы не получаете ни сообщение о неудаче, ни об успехе. Возможно, что-то не так с данными, которые вы пытаетесь загрузить.

Попробуйте указать webView загрузить строку HTML («Hello World!») И посмотрите, удастся ли это. Если это так, то проблема заключается в вашем ресурсе данных или пути к нему.

8
CharlieMezak

Делегаты WebView

  1. Скачать MBProgessHUD 
  2. Добавить в свой проект 
  3. Когда начинается загрузка страницы, загрузка (*) начинается и скрывается после успешной загрузки страницы.

.h файл

    @interface WebViewViewController : UIViewController <MBProgressHUDDelegate,   UIWebViewDelegate>
   {
     MBProgressHUD *HUD;

   }

.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

Вероятно, произошла ошибка. Реализуйте –webView:didFailLoadWithError: и проверьте.

2
Deepak Danduprolu

Убедитесь, что реализовали делегат () в файле .h представления и подключите делегат к представлению. Это исправило это для меня.

2
woakley5

.h файл

@property (retain, nonatomic) IBOutlet UIWebView *webview;

.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