当 UIWebView 打开 PDF 时 webViewDidFinishLoad 未触发
Posted
技术标签:
【中文标题】当 UIWebView 打开 PDF 时 webViewDidFinishLoad 未触发【英文标题】:webViewDidFinishLoad not firing when UIWebView opens a PDF 【发布时间】:2011-04-05 15:37:27 【问题描述】:这是我的代码:
- (BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
/* Add Content Loading Banner */
if (navigationType == UIWebViewNavigationTypeLinkClicked)
[self.view addSubview:linkLoadView];
linkLoadView.alpha = 1.0;
/* Handle PDF Opening */
NSURL *url = [request URL];
NSString *urlString = [url absoluteString];
if([urlString rangeOfString:@".pdf"].location == NSNotFound)
return true;
else
NSURL *filePath = [NSURL URLWithString:urlString];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:filePath];
[pdfViewer loadRequest:requestObj];
[self.view addSubview:topView];
[self.view addSubview:linkLoadView];
return false;
基本上,它的作用是从我的 UIWebView webView 中检测 PDF 链接并将其加载到另一个 UIWebView pdfViewer(在名为 topView 的视图上找到)。然后我有一个功能如下:
- (void) webViewDidFinishLoad:(UIWebView *)theWebView
//for webView
[UIView animateWithDuration:2
animations:^
loadingView.alpha = 0.0;
linkLoadView.alpha = 0.0;
completion:^(BOOL finished)
[loadingView removeFromSuperview];
[linkLoadView removeFromSuperview];
];
对于 pdfViewer 网络视图,上述函数根本不会触发,但对于 webView 网络视图会触发。我该如何解决这个问题?
这是我在 viewDidLoad 方法上对两个 webView 的设置。
//Options for
webView.delegate = self;
webView.scalesPageToFit = YES;
for (id subview in webView.subviews)
if ([[subview class] isSubclassOfClass: [UIScrollView class]])
((UIScrollView *)subview).bounces = NO;
//Options for
pdfViewer.delegate = self;
pdfViewer.scalesPageToFit = YES;
for (id subview in pdfViewer.subviews)
if ([[subview class] isSubclassOfClass: [UIScrollView class]])
((UIScrollView *)subview).bounces = NO;
【问题讨论】:
pdfViewer 代理设置是否正确? @Joe 你是对的,但是,现在 PDF 根本无法加载。我的两个网页浏览量都是setDelegate:self
,这是问题的一部分吗?
更新了我的代码,做了一些小的改动。 pdfViewer 仍然没有触发
这很奇怪。尝试将此添加到加载代码if(webview != pdfViewer && [urlString rangeOfString:@".pdf"].location == NSNotFound)
else if(webview != pdfViewer)
。如果可行,我会发布答案。
认为两个问题无关,我发布了一个附加问题。那里的回答者给了我一个线索,我已经发布了一个与您在那里的建议非常相似的解决方案。如果你放弃上面的答案,就声誉而言是双赢的,但在下面,我会接受。
【参考方案1】:
确保 pdfViewer 委托设置正确,您可能需要调整加载代码。
- (BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
/* Add Content Loading Banner */
if (navigationType == UIWebViewNavigationTypeLinkClicked)
[self.view addSubview:linkLoadView];
linkLoadView.alpha = 1.0;
/* Handle PDF Opening */
NSURL *url = [request URL];
NSString *urlString = [url absoluteString];
if(webview != pdfViewer)
if([urlString rangeOfString:@".pdf"].location == NSNotFound)
return true;
else
NSURL *filePath = [NSURL URLWithString:urlString];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:filePath];
[pdfViewer loadRequest:requestObj];
[self.view addSubview:topView];
[self.view addSubview:linkLoadView];
return false;
return true;
【讨论】:
以上是关于当 UIWebView 打开 PDF 时 webViewDidFinishLoad 未触发的主要内容,如果未能解决你的问题,请参考以下文章