在 UIWebView 中单击链接时,iOS 从 DetailViewController 开始
Posted
技术标签:
【中文标题】在 UIWebView 中单击链接时,iOS 从 DetailViewController 开始【英文标题】:iOS segue from DetailViewController when Link is clicked in UIWebView 【发布时间】:2014-03-11 17:09:46 【问题描述】:我正在构建一个主从应用程序。 在 Detail-View 中,UIWebView 根据在主视图中选择的内容显示 html 内容。由于这个 html 还包含链接,我想在另一个视图中打开这些链接(一个 uiwebview,可以返回、重新加载等 - 几乎是一个浏览器)。
我已将 DetailViewController 设置为 DetailViewController.h 中的 UIWebViewDelegate
@interface DetailViewController : UIViewController <UISplitViewControllerDelegate, UIWebViewDelegate>
在DetailViewController.m的
- (void)configureView
(detailHtml 是显示上述 HTML 内容的 UIWebView)我愿意
self.detailHtml.delegate = self;
我还有点击链接时触发的功能
-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType
if ( inType == UIWebViewNavigationTypeLinkClicked )
[self.navigationController performSegueWithIdentifier:@"openCustomBrowser" sender:self];
return NO;
return YES;
将 segue 连接到详细视图控制器而不是导航控制器也不起作用。 故事板: http://s27.postimg.org/9hpgpmf1e/Bildschirmfoto_2014_03_11_um_18_02_19.jpg
我收到以下错误:
*** WebKit discarded an uncaught exception in the webView:decidePolicyForNavigationAction:request:frame:decisionListener:
delegate: <NSUnknownKeyException> [<BrowserViewController 0x8a5b120> setValue:forUndefinedKey:]:
this class is not key value coding-compliant for the key reload.
【问题讨论】:
【参考方案1】:我认为您需要将 inRequest 作为发件人。
但是为什么你需要创建新的视图控制器呢?您可以使用 goBack
方法从 UIWebView 返回。只需在工具栏或导航项中添加相应的按钮即可。
【讨论】:
使用 inRequest 作为发件人不起作用(我认为发件人不是问题,将其设置为 nil 也不起作用)。我想使用一个新视图,因为对于通常的详细视图,我希望视图看起来不同(即我不希望工具栏带有这些按钮等) @KevinGrabher,当然只是将其他对象设置为 setter 不会分叉。您需要重写 prepareForSegue... 以使用 NSURLRequest 作为发件人。您是否沉迷于您的新视图控制器将如何知道它应该加载哪个页面。并在BrowserViewController
中添加reload
方法,以了解谁以及为什么调用您的视图控制器不存在的方法。
我会做类似以下的事情,但似乎我的问题甚至在它发生之前就发生了,不是吗?即使在查看了几个教程之后,我似乎也无法找到导致错误的原因。 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender if ([segue.identifier isEqualToString:@"openCustomBrowser"]) BrowserViewController *destViewController = segue.destinationViewController; destViewController.htmlTest = @"<b>test</b>";
@KevinGrabher,尝试重新加载setValue:forUndefinedKey:
并在其中设置断点以查看它的执行位置。
问题不在于segue,而是新视图中的按钮之一。我从底部栏中删除了所有按钮,现在 segue 工作正常(有人打我的脸吗?)。非常感谢您的时间和帮助。以上是关于在 UIWebView 中单击链接时,iOS 从 DetailViewController 开始的主要内容,如果未能解决你的问题,请参考以下文章
当我单击 UIWebView 时,如何在 Safari 中打开链接?