在(BOOL)webView中:如何打开在UIWebView中点击的URL,打开一个Modal UIWebView

感谢您查看我的问题。 让我先描述一下这个应用程序。 我有一个基于标签栏的iOS5.1应用程序使用情节提要和ARC。 每个视图控制器都有四个选项卡,用于显示带有本地HTML文件的web视图(每个视图都是一组不同的html文件)。

目前,当用户触摸http或https链接时,它将在Safari中打开。 不过,我现在希望它通过模态视图在应用程序中打开。 我目前已经创build了界面并准备显示,但是我无法将URL传递给模型的“webview2”。 我已经找了很多例子,使用RSURL和string等,但不能得到任何工作。 一些示例代码似乎不适合我的情况。

在我的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中打开URL,那工作正常。 所以在这个部分

 //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保存,然后打开模态视图,然后在模态的Web视图打开只是感动的url?

我已经有了一个解雇button等模式的看法,我只是需要它加载点击的URL加载时。

我可以通过行加载模式…

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

但是只是加载它,当然没有任何URL信息和空白的web视图。 模式使用WebViewController.h / m。

如果有人可以告诉我如何打开和传递的url,所以它加载在inheritance“ModalWebView”,我将不胜感激。 请让我知道,如果我需要做任何属性或任何我应该包括在我的WebViewController.h / m运行模态视图。 也许 – (void)prepareForSegue需要使用? 如果是这样,怎么样?

我意识到答案可能很简单,但我仍然是一个初学者,花了好几天的时间试图find一个明确的答案。 我之前通过searchfind了我在这个网站上的很多问题的答案,但是恐怕我被困在了这个问题上。

感谢您的时间和耐心。

在你的视图控制器中,实现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. } } 

在我上面的代码中,将使用我的article.url对象设置的URL。 为了得到这个工作,你需要从方法shouldStartLoadWithRequest获取URL。

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

如果使用上述,我们现在用targetUrlreplace第一个代码块中的article.url。

 if ([segue.identifier isEqualToString:@"ModalWebView"]) { ModalWebViewController *wVC = [segue destinationViewController]; wVC.url = targetUrl; } 

在你的视图控制器中为你的模态web view.h文件创build一个NSURL。

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

在你的实现文件(.m)中创build方法viewDidAppear

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

希望我已经解释了,足以让你能够实现。