用户在使用活动指示器时遇到问题,该指示器在页面加载之前出现,但在主要内容加载后他们的活动指示器会回来问题是这里 UIWebView 没有完成加载?答案代码在下面使用。在代码之后,我将详细介绍如何将其用于您的情况。
(在下面的代码中,网页真正开始加载//show UIActivityIndicator
并真正完成加载主要内容(而不是您正在努力处理的额外内容)//hide UIActivityIndicator
)
//Define the NSStrings "lastURL" & "currentURL" in the .h file.
//Define the int "falsepositive" in the .h file. (You could use booleans if you want)
//Define your UIWebView's delegate (either in the xib file or in your code)
- (void)webViewDidFinishLoad:(UIWebView *)webView {
lastURL = [[NSString alloc] initWithFormat:@"%@", webView.request.mainDocumentURL];
if (falsepositive != 1) {
NSLog(@"Loaded");
//hide UIActivityIndicator
} else {
NSLog(@"Extra content junk (i.e. advertisements) that the page loaded with javascript has finished loading");
//This method may be a good way to prevent ads from loading hehe, but we won't do that
}
}
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; {
NSURL *requestURL =[request mainDocumentURL];
currentURL = [[NSString alloc] initWithFormat:@"%@", requestURL]; //not sure if "%@" should be used for an NSURL but it worked...
return YES;
}
- (void)webViewDidStartLoad:(UIWebView *)webView {
if ([currentURL isEqualToString:lastURL]) {
falsepositive = 1;
NSLog(@"The page is loading extra content with javascript or something, ignore this");
} else {
falsepositive = 0;
NSLog(@"Loading");
//show UIActiviyIndicator
}
}
当页面在 iOS 中加载时,会调用 webviewdidstart 和 webviewdidfinish,但不知道您的主页/html 内容的差异,objective-c 再次调用它以获得额外的内容,例如广告或框架。如果我在你的情况下使用它,我会创建一个 BOOL,例如 pageIsLoading,并在 webviewdidstart 中将其设置为 true,然后在 webviewdidfinish 中将其设置为 false。在 webviewdidfinish 中关闭 BOOL 后,我将通过调用一个方法来结束 webviewdidfinish,该方法将在短暂延迟后检查 BOOL pageIsLoading == YES,如果是,则什么也不做,因为正在加载更多内容。如果 pageIsloading == no 则必须加载所有内容,现在是拍摄快照的好时机。