在 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 = @"&lt;b&gt;test&lt;/b&gt;"; @KevinGrabher,尝试重新加载setValue:forUndefinedKey: 并在其中设置断点以查看它的执行位置。 问题不在于segue,而是新视图中的按钮之一。我从底部栏中删除了所有按钮,现在 segue 工作正常(有人打我的脸吗?)。非常感谢您的时间和帮助。

以上是关于在 UIWebView 中单击链接时,iOS 从 DetailViewController 开始的主要内容,如果未能解决你的问题,请参考以下文章

iOS 清除 UIWebView 的回溯历史

当我单击 UIWebView 时,如何在 Safari 中打开链接?

UIWebView 故障中的视频链接

IOS - UIWebview - 获取点击链接的 URL 并编辑 url

单击文本字段时 iOS 7 中的 UIWebView 问题

iOS - 通过 JavaScript 获取我在 UIWebView 中单击的图像的 URL