iOS使用UIWebVIew的外部应用程序打开文档
我有一个UIWebView
。 点击包含文档的链接时,我想在外部应用程序(办公室,openoffice等)中打开该文档,但不在UIWebView
。
我知道如何做电子邮件:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if ([[[request URL] scheme] isEqual:@"mailto"]) { [[UIApplication sharedApplication] openURL:[request URL]]; return NO; } return YES;
}
有没有办法做到这一点,但文件? 谢谢!
编辑:这就是我所做的:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSURL* possibleDocumentURL = [request mainDocumentURL]; NSString* extension = [[possibleDocumentURL lastPathComponent] pathExtension]; if ([[[request URL] scheme] isEqual:@"mailto"]) { [[UIApplication sharedApplication] openURL:[request URL]]; return NO; }else if ([extension isEqualToString:@"pdf"] || [extension isEqualToString:@"docx"]){ NSURLRequest *req = [[NSURLRequest alloc] initWithURL:possibleDocumentURL]; [NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *resp, NSData *respData, NSError *error){ stringByAppendingString:names[names.count-1]]; NSString *fileName = @"myFile"; NSString * path = [NSTemporaryDirectory() stringByAppendingPathComponent:fileName]; NSError *errorC = nil; BOOL success = [respData writeToFile:path options:NSDataWritingFileProtectionComplete error:&errorC]; if (success) { self.documentController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:path]]; self.documentController.delegate = self; [self.documentController presentOptionsMenuFromRect:CGRectZero inView:self.view animated:YES]; } else { NSLog(@"fail: %@", errorC.description); } }]; return NO; } return YES; }
现在的问题是, UIDocumentInteractionController
只显示Mail
和Messages
应用程序。 我需要用于打开pdf
, docx
等文件的应用程序。
有任何想法吗? 谢谢!
在[UIWebViewDelegate webView: shouldStartLoadWithRequest: navigationType: navigationType:]
您可以检查URL是否看起来像指向文档。 最简单的方法就是查找PDF,DOC等。如果你想要更好,那么使用UTTypes。
NSURL* possibleDocumentURL = [request mainDocumentURL]; NSString* extension = [[possibleDocumentURL lastPathComponent] pathExtension]; // TODO: check ending
如果它是一个文档的URL,那么就下载文档。 您现在可以打开DocumentPreviewController
, UIDocumentInteractionController
或QLPreviewController
。 用户仍然需要select文件应该去的地方。
如果你想打开它的应用程序支持自定义的URLscheme,你可以直接将URL或文件本身传递给它,而无需用户交互。
UIDocumentInteractionController将为您工作。
苹果文档
伟大的一步一步的教程