我想拦截来自UIDocumentInteractionController的任何支持的文件类型的点击,并在模态视图中显示它们(由presentPreviewAnimated:
UIDocumentInteractionController 的方法提供).此模态视图还提供"Open In ..."功能,以在设备上的其他兼容应用程序中打开任何这些文档.下面的代码将拦截这些点击,检测URL字符串是否具有任何适当的后缀,加载此数据,将其写入目录,再次读取它,最后使用该presentPreviewAnimated:
方法使用数据.我必须首先将数据写入文件系统,因为UIDocumentInteractionController需要本地数据,不能直接使用URL中的数据(据我所知).
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
ILog(@"URL loading for NavigationTypeLinkClicked: %@", request.URL.absoluteString);
if ([request.URL.absoluteString hasSuffix:@"pdf"] || [request.URL.absoluteString hasSuffix:@"doc"] || [request.URL.absoluteString hasSuffix:@"xls"] || [request.URL.absoluteString hasSuffix:@"ppt"] || [request.URL.absoluteString hasSuffix:@"rtf"] || [request.URL.absoluteString hasSuffix:@"key"] || [request.URL.absoluteString hasSuffix:@"numbers"] || [request.URL.absoluteString hasSuffix:@"pages"]) {
if (NSClassFromString(@"UIDocumentInteractionController")) {
NSArray *parts = [request.URL.absoluteString componentsSeparatedByString:@"/"];
self.previewDocumentFileName = [parts lastObject];
NSLog(@"The file name is %@", previewDocumentFileName);
// Get file online
NSData *fileOnline = [[NSData alloc] initWithContentsOfURL:request.URL];
// …
Run Code Online (Sandbox Code Playgroud) 我目前有一个在模态视图中显示的UIWebView.它基本上是一个详细视图,提供用户单击链接时的页面视图.当视图被驳回,然后再次提出了(当用户点击另一个链接),先前加载的内容仍然是可见的,"上面"的最后内容的新内容加载.这是有道理的,因为UIWebView的实例在会话之间持续存在,并且仅在需要内存时才会释放.
但是,当模态视图被解除时,我想完全清除UIWebView,以便1)内容被清除,2)内存被释放.到目前为止,我的研究和尝试都没有找到答案.这些链接对我没用:
我已经尝试[[NSURLCache sharedURLCache] removeAllCachedResponses];
将webView设置为nil并在模态视图关闭时手动释放webView无效.干瘪群众的任何想法?