感谢您查看我的问题。让我先描述一下这个应用程序。我有一个适用于 iOS5.1 的基于标签栏的应用程序,它使用 Storyboard和 ARC。有四个选项卡,每个选项卡都有一个 View Controller ,显示带有本地 HTML 文件的 Web View (每个 View 是要显示的一组不同的 HTML 文件)。
目前,当用户触摸 http 或 https 链接时,它会在 Safari 中打开。但是,我现在希望它通过模态视图在应用程序中打开。我目前已经创建了界面并准备好显示,但我无法将 URL 传递给模态的“webview2”。我已经寻找了许多示例来使用 RSURL 和字符串等来执行此操作,但无法使它们中的任何一个工作。给出的一些示例代码似乎不适用于我的情况。
在我的 FirstViewController.m 文件中(在其他 View 中也是如此),我有...
- (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;
}
我需要它来打开带有点击 URL 的模态视图,而不是 Safari。
所以我想问的是... 保存此 URL,然后打开模态视图,然后在模式 web View 中打开刚刚触摸的 URL 的最佳方法是什么?
我已经有了带有关闭按钮等的模态视图。我只需要它在加载时加载点击的 URL。
我可以通过线路加载模态...
[self performSegueWithIdentifier:@"ModalWebView" sender:self];
当然,这只是在没有任何 URL 信息和空白 webview 的情况下加载它。模态使用 WebViewController.h/m。
如果有人能告诉我如何打开和传递 URL 以便它加载到 segue“ModalWebView”中,我将不胜感激。如果我需要制作任何属性或我应该包含在运行模态视图的 WebViewController.h/m 中的任何其他内容,请告诉我。也许需要使用 -(void)prepareForSegue?如果是,怎么办?
我意识到答案可能很简单,但我仍然是初学者,花了几天时间试图找到一个明确的答案。我以前通过搜索在这个网站上找到了很多问题的答案,但恐怕我被困在这个问题上了。
感谢您的时间和耐心。
最佳答案
在您的 View Controller 中,实现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 对象中设置的。要使其正常工作,您需要从方法 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;
}
如果使用上述内容,我们现在将第一个代码块中的 article.url 替换为 targetUrl。
if ([segue.identifier isEqualToString:@"ModalWebView"]) {
ModalWebViewController *wVC = [segue destinationViewController];
wVC.url = targetUrl;
}
在您的模式 web view.h 文件的 View Controller 中创建一个 NSURL。
//ModalWebViewController.h
@property (strong, nonatomic) NSURL *url;
在您的实现文件 (.m) 中创建方法 viewDidAppear
//ModalWebViewController.m
-(void) viewDidAppear:(BOOL)animated {
[_webView loadRequest:[NSURLRequest requestWithURL:url]];
}
希望我的解释足以让您能够实现。
关于ios - 在 (BOOL)webView : How to open a URL clicked in UIWebView that opens a Modal UIWebView 内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10052264/