2011-08-18 10 views
7

UIViewControllerをモーダルで表示し、UIWebViewを表示しています。ユーザーがキャンセルボタンを押したときにUIWebViewを却下するにはどうすればよいですか?私が持っているUIWebViewをキャンセルするには?

ひとつのアイデアは、http://cancelに、ボタンのリンクを解除してからwebView.request.URL.host isEqualToString:@"cancel"場合

- (void)webViewDidStartLoad:(UIWebView *)webView 

にチェックし、その後、ビューコントローラを却下することです。

ホストにドットが含まれていなければなりませんか?たとえば「cancel.com」ですか?

答えて

8

あなたは正しい道を歩いていますが、アプローチは少しずれています。これをHTTP URLにする必要はありません。あなたのURLをcancel:にしてください。

<a href="cancel:">Thing to click</a> 

次に、WebビューデリゲートにwebView:shouldStartLoadWithRequest:navigationType:を実装します。このような(テストされていない)もの:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    if ([request.URL.scheme isEqualToString:@"cancel"]) { 
     [self dismissModalViewControllerAnimated:YES]; 
     return NO; 
    } 
    return YES; 
} 
+0

ありがとう!投稿した直後ではなく '-webView:shouldStartLoadWithRequest:'を使うことを考えましたが、質問を編集することはできませんでした。 URLのスキームを使用する方が良いです。甘い! – ma11hew28

+0

これは私が探しているものです。素晴らしい答え。ありがとう! – venj

6

Webビューでの読み込みを停止するか、それを含むモーダルビューコントローラを閉じるだけでは不十分です。ビューコントローラを閉じるには

[webView stopLoading]; 

[self dismissModalViewControllerAnimated:YES]; 

は、あなたがそれを解放する前に、Webビューのdelegateをnilに設定することを忘れないでください。ロードを停止するには

+0

+1これは、表示コントローラを無効にすることが望ましい場合でも、これを行うよりよい方法であるためです。私はView Controllerが解除された後にWebViewがまだバックグラウンドで読み込もうとしている場合、アプリケーションがクラッシュする問題に遭遇しました。 – Sepui

関連する問題