0

UIWebView (webview1) を含む UIViewController があります。WebView は数行のテキストですが、リンクが含まれています。この小さなスペースで外部 Web サイトに移動するリンクを開くのではなく、フルスクリーンになる webview2 に送信したいと思います。目標は、Web リクエストを Safari ではなくアプリ内に保持することです。webview2 用に別のコントローラーを作成する代わりに、webview1 のコントローラーを使用したいと思います。

Webview1Controller コントローラーでは、webViewLoad でこれを行います。

webview1.delegate = self;

ここで、web リクエストを webview2 に渡します。これは正常に機能します。

- (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;
}

Interface Builder では、webview2.xib ファイルの Owner クラスを Webview1Controller に設定しています。「view」とwebview2outletが接続されています。Webview2outlet という名前の Webview1Controller に IBOutlet があります。

webview1 に戻ると、同じリクエストも読み込まれています。webview1 が何かをロードするのを止める方法はありますか? 上記のメソッドで NO を返すと、webview1 はコンテンツをレンダリングしません。

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

4

2 に答える 2

1

NOデリゲート メソッドから戻ります。

あなたのコメントに関して、あなたがやりたいことは、あなたのデリゲートメソッドがあなたのコントローラーを呼び出しているWebビューをチェックすることだと思います:

- (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プロパティがあるため、アプリのデリゲートを介して取得するのではなく、それを使用できることに注意してください)。

于 2009-04-20T15:57:05.017 に答える
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;
}
于 2009-04-20T16:52:32.513 に答える