UIWebViewで読み込みが完了したことを判断する
UIWebViewで読み込みが完了したとき通常webViewDidFinishLoadが呼ばれますが、フレームなどを使用したページではwebViewDidFinishLoadが複数回呼ばれ読み込みが完了したタイミングがわからない場合があります。networkActivityIndicatorVisibleなどを設定する場合に本当に読み込みが完了したタイミングを知りたい場合は以下のようにします。
まずヘッダに読み込み中のプロパティを宣言します
@property (nonatomic) NSInteger webViewLoadingCount;
次に実装ファイルでwebViewDidStartLoadでプロパティをインクリメント、webViewDidFinishLoadとdidFailLoadWithErrorでプロパティをデクリメントします
- (void)webViewDidStartLoad:(UIWebView *)webView { self.webViewLoadingCount++; [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; } - (void)webViewDidFinishLoad:(UIWebView *)webView { self.webViewLoadingCount--; if (self.webViewLoadingCount > 0) { // Loading return; } [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; // Load complete } - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { self.webViewLoadingCount--; if (self.webViewLoadingCount > 0) { // Loading return; } [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; // Load complete with error }
補足
最初はUIWebViewのloading(isLoading)プロパティで判断しようとしましたが、読み込み中でもNOが返ってきたりして判断できませんでした。
またJavascriptの実行が完了したかどうかの判定のしかたは不明です:)