2009-04-20 16 views
0

私は、UIViewControllerにUIWebView(webview1)を持っています。 webviewはほんの数行のテキストですが、そこにリンクがあります。この小さなスペースで、外部のウェブサイトに行くリンクを開くのではなく、フルスクリーンになるwebview2に送信したいと思います。目標は、WebリクエストをSafariではなく私のアプリに保存することです。 webview2用の別のコントローラを作成する代わりに、webview1のコントローラを使用したいと思います。 Webview1Controllerコントローラで別のWebviewへのWebviewリクエストのスロー

は、私がwebViewLoadでこれを行う:私は正常に動作webview2へのWeb要求、ハンドオフのはここ

webview1.delegate = self; 

だ:Interface Builderで

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ 

myapp *delegate = [[UIApplication sharedApplication] delegate]; 
Webview1Controller *webview1Controller = [[Webview1Controller alloc] initWithNibName:@"webview2" bundle:nil]; 
//self.view = webview2;' 
[delegate.navigationController pushViewController: webview1Controller animated:YES]; 
[webview1Controller.webview2 loadRequest:request]; 
[webview1Controller release]; 
return YES; 
} 

を、私はwebview2を持っています.xibファイルの所有者クラスをWebview1Controllerに設定します。それは "view"で、webview2outletが接続されています。私はwebview1outrollerという名前のWebview1ControllerにIBOutletを持っています。

私はwebview1に戻っても、同じリクエストを読み込んでいます。 webview1の読み込みを停止する方法はありますか?上記の方法でNOを返すと、webview1は自分のコンテンツをレンダリングしません。

1つの解決策は、機能するviewWillAppearでwebview1コンテンツをリロードすることです。しかし、より良い方法がありますか?

答えて

1

NOをデリゲートメソッドから返します。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ 
    if (webView == webview1) { 
     Webview1Controller *webview1Controller = [[Webview1Controller alloc] initWithNibName:@"webview2" bundle:nil]; 
     [self.navigationController pushViewController:webview1Controller animated:YES]; 
     [webview1Controller.webview2 loadRequest:request]; 
     [webview1Controller release]; 
     return NO; 
    } 
    else { 
     return YES; 
    } 
} 

(注、また、のUIViewControllerはnavigationController性質を持っていることをあなたが使用できるように:あなたのコメントについて

、私はあなたのコントローラを呼び出しているWebViewのデリゲートメソッドのチェックを行うされて何をしたいかと思いますそれはあなたのアプリケーションデリゲートを介して取得するのではなく)。

+0

以下のコメントを参照してください。 – 4thSpace

+0

編集済みの回答を参照してください。コメントを入れるには少し時間がかかります。 –

+0

パーフェクト。ありがとう。 – 4thSpace

0

オリジナルの代わりにリクエストのコピーをロードし、NOを返すとどうなりますか?

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ 

    myapp *delegate = [[UIApplication sharedApplication] delegate]; 
    Webview1Controller *webview1Controller = [[Webview1Controller alloc] initWithNibName:@"webview2" bundle:nil]; 
    //self.view = webview2;' 
    [delegate.navigationController pushViewController: webview1Controller animated:YES]; 
    [webview1Controller.webview2 loadRequest:[[request copy] autorelease]]; 
    [webview1Controller release]; 
    return NO; 
} 
+0

NOを返すと、webview1は空白になります。メインビューがロードされると、上記の方法も起動します。それは空白のwebview1になるので、クリックするためのリンクは決してありません。 – 4thSpace