Единственный надежный метод, который я нашел, - это прослушать три метода, которые сообщают, что он собирается начать загрузку, и что он завершил загрузку (плюс эквивалент «сбой»), и вручную поддерживать счет для каждого. 1001 *
т.е. что-то вроде:
int outstandingRequests;
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
outstandingRequests++;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
outstandingRequests--;
if( outstandingRequests < 1 )
viewLoadingPleaseWait.hidden = TRUE;
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
outstandingRequests--;
}
Мне также обычно приходилось переопределять метод didFail - Apple неправильно использует это, чтобы сообщить, что, например, проигрыватель YouTube взял на себя обработку видео YouTube. Это НЕ сбой, это «страница была загружена другим приложением».
, например
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
outstandingRequests--;
if( [error code] == NSURLErrorCancelled )
{
NSLog(@"[%@] ...webView CANCELLED loading", [self class] );
}
else if( [[error domain] isEqualToString:@"WebKitErrorDomain"]
&& [error code] == 204)
{
// no worries ... YouTube, iCal, or etc took over the page load
}
}