Ios webViewDidFinishLoad不工作?

Ios webViewDidFinishLoad不工作?,ios,uiwebview,Ios,Uiwebview,在我的应用程序中,我试图在加载UIWebView时显示一个启动图像,这样它就不仅仅是一个空白屏幕。但是,我的webViewDidFinishLoad方法将不起作用。这意味着一旦加载UIWebView,启动图像就会出现,但不会从屏幕上消失 我的方法代码是: - (void)webViewDidFinishLoad:(UIWebView *)webView { NSLog(@"content loading finished"); [loadingImageView removeF

在我的应用程序中,我试图在加载UIWebView时显示一个启动图像,这样它就不仅仅是一个空白屏幕。但是,我的webViewDidFinishLoad方法将不起作用。这意味着一旦加载UIWebView,启动图像就会出现,但不会从屏幕上消失

我的方法代码是:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
     NSLog(@"content loading finished");
    [loadingImageView removeFromSuperview];  
}
如果您能提供任何有关该方法为何无效的帮助,我们将不胜感激

My.h:

@interface ViewController : UIViewController

-(IBAction)makePhoneCall:(id)sender;

@property (nonatomic, strong) IBOutlet UIWebView *webView;
@property(nonatomic, strong) UIImageView *loadingImageView;

@end
My ViewDidLoad和webViewDidFinishLoading:

- (void)viewDidLoad {
    UIWebView *mWebView = [[UIWebView alloc] init];
    mWebView.delegate = self;
    mWebView.scalesPageToFit = YES;

    [super viewDidLoad];
}


//**************** Set website URL for UIWebView
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.sleafordpizza.com/food"]]];


//**************** Add Static loading image to prevent white "flash" ****************/
UIImage *loadingImage = [UIImage imageNamed:@"LittleItalyLogo.png"];
loadingImageView = [[UIImageView alloc] initWithImage:loadingImage];
loadingImageView.animationImages = [NSArray arrayWithObjects:
                                    [UIImage imageNamed:@"LittleItalyLogo.png"],
                                    nil];
[self.view addSubview:loadingImageView];

}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
     NSLog(@"content loading finished");
    // Remove loading image from view
    [loadingImageView removeFromSuperview];
}

嗨,可能您没有设置正确的委托

这是给你的小代码提示

-(void)viewDidLoad {

    mWebView = [[UIWebView alloc] init];
    mWebView.delegate = self;
    mWebView.scalesPageToFit = YES;
}

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

  [loadingImageView removeFromSuperview];  
   NSLog(@"finish");   
}
在您的.h文件中添加

@interface MyView: UIViewController <UIWebViewDelegate> {
           UIWebView *webView;
}

嗨,可能您没有设置正确的委托

这是给你的小代码提示

-(void)viewDidLoad {

    mWebView = [[UIWebView alloc] init];
    mWebView.delegate = self;
    mWebView.scalesPageToFit = YES;
}

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

  [loadingImageView removeFromSuperview];  
   NSLog(@"finish");   
}
在您的.h文件中添加

@interface MyView: UIViewController <UIWebViewDelegate> {
           UIWebView *webView;
}

在某些时候,这个委托方法实际上永远不会被激发。在我的一些项目中,我遇到了同样的严重问题

有一次,我不得不用定时器来解决这个问题,每隔一秒钟左右检查一次web视图的状态,看看是否可以继续

在那个特殊的情况下,我只需要一个特定的元素出现。但是,由于注入了外部脚本错误,视图没有触发finish loading事件

因此,我只是在web视图开始加载时启动了一个触发器,然后不时调用一个方法来查看web视图是否包含有问题的元素

- (void)methodCalledByTimer {
     if (<I still do not have what I need>) {
        //The web view has not yet finished loading; keep checking
     } else {
        //The web view has finished loading; stop the timer, hide spinners and proceed
     }
}
然后,当然,我也会检查finishedLoading事件,只是为了确定。还记得实现webView:didFailLoadWithError:方法

在等待网页完成加载时,需要记住一些事情

例如,您是否真的需要它来停止加载,或者您还可以做些什么?就我而言,我需要一个元素。能够正确执行脚本是可能需要的另一件事

第二,加载页面是否使用任何外部资源?我曾经有过外部脚本错误,导致根本没有调用webViewDidFinishLoad:方法。如果我删除了外部脚本,它就会工作

第三,如果页面正在使用外部资源,那么您不仅会看到自己资源的负载能力,还会看到外部资源的负载能力。跟踪脚本、广告等。若一个资源提供商缓慢地(或根本不)交付内容,那个么页面可能永远处于加载状态


所以,我会去查一些别的东西

在某些时候,此委托方法实际上永远不会被激发。在我的一些项目中,我遇到了同样的严重问题

有一次,我不得不用定时器来解决这个问题,每隔一秒钟左右检查一次web视图的状态,看看是否可以继续

在那个特殊的情况下,我只需要一个特定的元素出现。但是,由于注入了外部脚本错误,视图没有触发finish loading事件

因此,我只是在web视图开始加载时启动了一个触发器,然后不时调用一个方法来查看web视图是否包含有问题的元素

- (void)methodCalledByTimer {
     if (<I still do not have what I need>) {
        //The web view has not yet finished loading; keep checking
     } else {
        //The web view has finished loading; stop the timer, hide spinners and proceed
     }
}
然后,当然,我也会检查finishedLoading事件,只是为了确定。还记得实现webView:didFailLoadWithError:方法

在等待网页完成加载时,需要记住一些事情

例如,您是否真的需要它来停止加载,或者您还可以做些什么?就我而言,我需要一个元素。能够正确执行脚本是可能需要的另一件事

第二,加载页面是否使用任何外部资源?我曾经有过外部脚本错误,导致根本没有调用webViewDidFinishLoad:方法。如果我删除了外部脚本,它就会工作

第三,如果页面正在使用外部资源,那么您不仅会看到自己资源的负载能力,还会看到外部资源的负载能力。跟踪脚本、广告等。若一个资源提供商缓慢地(或根本不)交付内容,那个么页面可能永远处于加载状态


所以,我会去查一些别的东西

我看到您没有处理错误。如果出现错误,则不会发生所有后续委托调用。当webview也使用插件时,我惊讶地发现这是真的。它调用这个错误方法,告诉您webview已交给代理,在我的例子中是电影播放器

实施这个,看看是不是真的

-(void) webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    if (error.code == 204) {
        //request was handled by a plugin instead of by the webview directly
        ...
    }
    else
    {
        NSLog(@"didFailLoadWithError. ERROR: %@", error);
    }
}

我可以用这个方法而不是webviewdidfinishLoad来完成所有剩余的加载工作,我发现您没有处理错误。如果出现错误,则不会发生所有后续委托调用。当webview也使用插件时,我惊讶地发现这是真的。它调用这个错误方法,告诉您webview已交给代理,在我的例子中是电影播放器

实施这个,看看是不是真的

-(void) webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    if (error.code == 204) {
        //request was handled by a plugin instead of by the webview directly
        ...
    }
    else
    {
        NSLog(@"didFailLoadWithError. ERROR: %@", error);
    }
}

我可以用这个方法代替webviewdidfinishLoad来完成所有剩余的加载工作

您是否设置了web视图的
委托
?您是否设置了web视图的
委托
?在行上显示please.h文件和viewDidLoad方法:mWebView.delegate=self;它给了我一个错误:请在您的问题中从不兼容的类型“ViewController*const_strong”Display.h文件分配给“id”。webViewDidFinishLoad现在可以工作,但在加载网页后,它会立即消失,并显示初始图像,保留一个空白屏幕。请在以下行显示.h文件和viewDidLoad方法:mWebView.delegate=self;它给了我一个错误:请在您的问题中从不兼容的类型“ViewController*const_strong”Display.h文件分配给“id”。webViewDidFinishLoad现在可以工作,但在加载网页后,它会立即消失,并留下一个空白屏幕。