3

私の質問をご覧いただきありがとうございます。最初にアプリについて説明します。ストーリーボードと ARC を使用している iOS5.1 用のタブ バー ベースのアプリがあります。ローカル HTML ファイルを含む Web ビューを表示するビュー コントローラーを備えた 4 つのタブがあります (各ビューは、表示する HTML ファイルの異なるセットです)。

現在、ユーザーが http または https リンクに触れると、Safari で開きます。ただし、モーダルビューを介してアプリ内で開くようになりました。現在、インターフェイスを作成して表示する準備ができていますが、モーダルの「webview2」に URL を渡すことができません。RSURL や文字列などを使用してこれを行う多くの例を探しましたが、どれも機能しません。与えられたコード例のいくつかは、私の状況ではうまくいかないようでした。

私の FirstViewController.m ファイル (他のビューでも同じ) には、...

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

    //Gets the link.
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        NSURL *URL = [request URL]; 
        NSLog(@"url:%@",request); //Get's the url itself

        //If it's an external link...
        if ([[URL scheme] isEqualToString:@"http"] || 
            [[URL scheme] isEqualToString: @"https" ])  {
            [[UIApplication sharedApplication] openURL:[request URL]];
            NSLog(@"Opened in Safari");
            return NO;
        }

        //If it's an email address...
        else if ([[URL scheme] isEqualToString:@"mailto"]) {
            [webView loadRequest:request];
            [[UIApplication sharedApplication] openURL:[request URL]];
            NSLog(@"Opened in Mail App");
            return NO;
        }
    }        
    return YES;
}  

URL を Safari で開きたい場合は、これで問題なく動作します。では、この部分では...

//If it's an external link...
    if ([[URL scheme] isEqualToString:@"http"] || 
        [[URL scheme] isEqualToString: @"https" ])  {
        [[UIApplication sharedApplication] openURL:[request URL]];
        NSLog(@"Opened in Safari");
        return NO;
    }

Safari ではなく、クリックした URL でモーダル ビューを開く必要があります。

だから私が求めているのは... このURLを保存してモーダルビューを開き、モーダルWebビューで触れたばかりのURLを開く最良の方法は何ですか?

私はすでに閉じるボタンなどで作成されたモーダル ビューを持っています。ロード時にクリックされた URL をロードするだけで済みます。

行を介してモーダルをロードできます...

[self performSegueWithIdentifier:@"ModalWebView" sender:self];

もちろん、URL 情報や空白の Web ビューなしでロードするだけです。モーダルは WebViewController.h/m を使用します。

URLを開いて渡す方法を誰かが教えてくれれば、セグエ「ModalWebView」に読み込まれます。モーダル ビューを実行する WebViewController.h/m に含める必要があるプロパティやその他のものを作成する必要がある場合はお知らせください。おそらく -(void)prepareForSegue を使用する必要がありますか? もしそうなら、どのように?

答えは単純かもしれませんが、私はまだ初心者であり、明確な答えを見つけるのに何日も費やしました。以前にこのサイトを検索して、このサイトに関する多くの質問に対する回答を見つけましたが、残念ながら、このサイトで行き詰まっています。

お時間をいただき、ありがとうございます。

4

1 に答える 1

1

ビューコントローラで、メソッドを実装しprepareForSegue、次のコードを追加します。

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    NSLog(@"Source Controller = %@", [segue sourceViewController]);
    NSLog(@"Destination Controller = %@", [segue destinationViewController]);
    NSLog(@"Segue Identifier = %@", [segue identifier]);

    if ([segue.identifier isEqualToString:@"ModalWebView"]) {

        ModalWebViewController *wVC = [segue destinationViewController];
        wVC.url = [NSURL URLWithString:article.url]; // replace article.url with your url.
    }

}

上記のコードでは、使用されるURLはarticle.urlオブジェクトから設定されています。これを機能させるには、メソッドからURLを取得する必要がありますshouldStartLoadWithRequest

// CurrentViewController.h
@property (strong, nonatomic) NSURL *targetUrl;

// CurrentViewController.m 
//If it's an external link...
    if ([[URL scheme] isEqualToString:@"http"] || 
        [[URL scheme] isEqualToString: @"https" ])  {
        targetUrl = url;
        [self performSegueWithIdentifier:@"ModalWebView" sender:self];
        return NO;
    }

上記を使用する場合は、最初のコードブロックのarticle.urlをtargetUrlに置き換えます。

if ([segue.identifier isEqualToString:@"ModalWebView"]) {

            ModalWebViewController *wVC = [segue destinationViewController];
            wVC.url = targetUrl; 
        }

モーダルWebview.hファイルのViewControllerで、NSURLを作成します。

//ModalWebViewController.h
@property (strong, nonatomic) NSURL *url;

実装ファイル(.m)でメソッドを作成しますviewDidAppear

//ModalWebViewController.m 
-(void) viewDidAppear:(BOOL)animated {
    [_webView loadRequest:[NSURLRequest requestWithURL:url]];
}

あなたが実装できるようになるのに十分だと私が説明したことを願っています。

于 2012-04-07T10:25:33.283 に答える