ViewDidLoadに読み込まれるUIWebViewが1つのタブにありますが、ユーザーが他のタブをタップすると読み込みが中断され、- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
が呼び出されますが、ユーザーがタップした場合にwebViewが読み込まれるかどうかを確認する方法を知りたいです前のタブをもう一度、ロードされていない場合はリロードします、このような
-(void)viewWillAppear:(BOOL)animated
{
if (!webView)
{
NSURL *url = [NSURL URLWithString:@"url"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];
}
}
しかし、それは機能していません、助けてください?
UIWebviewには、webViewDidFinishLoadデリゲートメソッドがあります。これが行われたことを示すためにブール値を設定します。
- (void)webViewDidStartLoad:(UIWebView *)webView {
webViewDidFinishLoadBool = NO;
loadFailedBool = NO;
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
loadFailedBool = YES;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
if (!loadFailedBool)
webViewDidFinishLoadBool = YES;
}
まだ機能していない場合は、次の例を使用してください。また、ロードに失敗するとアラートが表示され、アラートは1回だけ表示されます。
ヘッダ:
@interface MyViewController : UIViewController <UIWebViewDelegate> {
BOOL wasLoaded;
BOOL alertWasShown;
}
@property (nonatomic, retain) IBOutlet UIWebView *myWebView;
@end
実装:
- (void)loadWebView:(NSString *)urlString {
if (wasLoaded == NO) {
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *requestObject = [NSURLRequest requestWithURL:url];
[myWebView loadRequest:requestObject];
}
}
- (void)viewWillAppear:(BOOL)animated {
NSString *urlString = @"put your url here";
[self loadWebView:urlString];
}
- (void)viewDidLoad {
[super viewDidLoad];
wasLoaded = NO;
alertWasShown = NO;
myWebView.delegate = self;
}
- (void)webViewDidStartLoad:(UIWebView *)webView {
// Not necessary to do anything here.
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
wasLoaded = YES; // Indicates that it finished loading.
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
if (alertWasShown == NO) {
UIAlertView *alert = ... // Create an alert.
[alert show];
alertWasShown = YES;
}
}
それがお役に立てば幸いです。
元の質問が何年も前に投稿されたのは事実です。最近、私はこの問題に対する信頼できる解決策を見つけなければなりませんでした。
これが私のために働いた解決策です:
完全なコードは次のとおりです。
- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation{
[webView evaluateJavaScript:@"document.body.innerHTML" completionHandler:^(id result, NSError *error) {
if (result != nil) {
// Call your method here
}
if(error) {
NSLog(@"evaluateJavaScript error : %@", error.localizedDescription);
}
}];
}
複数のフレームがあるページの場合は、UIWebView.loadingプロパティも使用する必要があります。
Appleのドキュメント:@property(nonatomic、readonly、getter = isLoading)BOOLloadingレシーバーがコンテンツのロードを完了したかどうかを示すブール値。
はいの場合、受信者はまだコンテンツをロードしています。それ以外の場合は、いいえ。
IOS6(ベータ4)では、Appleはこのプロパティに関するいくつかの問題も修正しました。 http://code-gotcha.blogspot.fi/2012/08/uiwebviewloading -in-ios-6-fixed.html