在一个(BOOL)webView的:如何打开UIWebView的点击一个网址,打开一个模态的UIWe

2019-09-16 09:27发布

感谢您浏览我的问题。 首先,让我描述的应用程序。 我有一个使用故事板和ARC iOS5.1标签栏基于应用程序。 有四个卡口与每一个显示用本地HTML文件网页视图的图控制器(每个视图是一组不同的HTML文件来显示)。

目前,当用户触摸HTTP或HTTPS链接,它会在Safari中打开。 不过,我现在希望通过一个模态视图的应用程序中打开。 我公司目前拥有的接口创建并准备好展示,但我不能URL传递到模式的“webview2”。 我找了很多例子可以做到这一点使用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;
}  

其中,如果我想要的网址在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;
    }

我需要它来打开一个模式视图与点击的URL,而不是Safari浏览器。

那么,我问的是... 什么是让这个URL保存最好的办法,然后打开模式视图,然后在模态的WebView打开刚触及网址是什么?

我已经有一个按钮,辞退等我只是需要它时,它加载与点击的URL加载做出的模式的看法。

我可以通过线加载模式...

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

但只是加载它没有任何URL信息和空白的WebView,当然。 模态使用WebViewController.h /米。

如果有人能告诉我如何打开和URL传递所以它加载在SEGUE“ModalWebView”,我将不胜感激。 请让我知道,如果我需要做任何性质或其他任何东西,我应该在我的WebViewController.h / M运行模式视图。 也许 - (无效)prepareForSegue需要使用? 如果是这样,怎么样?

我知道答案也许很简单,但我还是一个初学者,花了几天试图找到一个明确的答案。 我通过搜索发现之前回答许多我的问题在这个网站,但我怕我卡在这一个。

感谢您的时间和耐心。

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

如果使用上面,我们现在与targetUrl这个第一个代码块替换article.url。

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

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

在您的网页模式文件view.h您的视图控制器创建一个NSURL。

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

在您的实现文件(.M)创建方法viewDidAppear

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

希望我已经解释说,足够你能够实现。



文章来源: Within a (BOOL)webView: How to open a URL clicked in UIWebView that opens a Modal UIWebView