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只显示MailMessages应用程序。 我需要用于打开pdfdocx等文件的应用程序。

有任何想法吗? 谢谢!

[UIWebViewDelegate webView: shouldStartLoadWithRequest: navigationType: navigationType:]您可以检查URL是否看起来像指向文档。 最简单的方法就是查找PDF,DOC等。如果你想要更好,那么使用UTTypes。

 NSURL* possibleDocumentURL = [request mainDocumentURL]; NSString* extension = [[possibleDocumentURL lastPathComponent] pathExtension]; // TODO: check ending 

如果它是一个文档的URL,那么就下载文档。 您现在可以打开DocumentPreviewControllerUIDocumentInteractionControllerQLPreviewController 。 用户仍然需要select文件应该去的地方。

如果你想打开它的应用程序支持自定义的URLscheme,你可以直接将URL或文件本身传递给它,而无需用户交互。

UIDocumentInteractionController将为您工作。

苹果文档

伟大的一步一步的教程