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