码迷,mamicode.com
首页 > 其他好文 > 详细

(浏览文档)UIDocumentInteractionController打开自己的第三方应用、使用QLPreviewController浏览文档

时间:2015-04-08 18:10:02      阅读:378      评论:0      收藏:0      [点我收藏+]

标签:ios开发   第三方应用   文档   

UIDocumentInteractionController:
在.h文件中添加<<span style="line-height: 21px;">UIDocumentInteractionControllerDelegate>
然后在.m文件中,新建一个方法,用来响应你点击按钮弹出时弹出的popview,其中会罗列可打开当前文件的其他应用。
方法如下:

-(void)openDocumentIn{

        documentController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:unEncodingURL]];

    documentController.delegate = self;

    documentController.UTI = @"com.microsoft.word.doc";

    [documentController presentOpenInMenuFromRect:CGRectMake(760, 20, 100, 100) inView:self.view animated:YES];

}

其中的 documentController.UTI 表示那些类型的文件支持第三方软件打开,此链接里面有各种类型文件对应的数https://developer.apple.com/library/mac/#documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html 可用根据unEncodingURl中的文件后缀名去动态设置这个值rect 根据自己的需求写

 

然后delegate里面的方法

- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)interactionController

{

    return self;

 

}


QLPreviewController:

iOS SDK包括了QLPreviewControllerAPI,组件允许用户浏览许多不同的文件类型,如XLS文件,Word文档文件,PDF文件。约翰已创建了一个示例应用程序演示使用QLPreviewController。在示范中,您可以查看几个不同的文件类型,甚至打印(使用无线打印机。)随着一个简短的教程,我们解释实施QLPreviewController的基础步骤,你可以找到约翰的例子::::对于过去的几个月中,我一直花一些时间检查出IOS快看文件预览 -接下来是一个短的应用程序,我写着是为了更熟悉QLPreviewControllerAPI对于那些不熟悉的读者可以这么看,quick look是一个框架,它提供快速预览的一系列文件类型 -支持的文件包括iWork文档,微软OfficeRTF格式,PDF格式,图像,文本文件,并以逗号分隔(CSV)文件。接下来在演示的程序中,我用了三个不同文件类型,.xls/image/ms office /pdf

为应用程序的接口文件如下所示,注意QL数据源的引用,使用的QLPreviewController时,你必须实现此协议QLPreviewControllerDataSource。这里的唯一的实例变量是一个数组,包涵每个被预览文件的文件字符串值。UITableViewController类将用于显示预览的文件列表,通过navigation到下一个预览界面。

  1. #import   
  2.    
  3. @interface TestViewController UITableViewController ource>  
  4.  
  5.   NSArray *arrayOfDocuments;  
  6.  
  7.    
  8. @end  


在本节中,我将展示一个选择适用于设立预览代码。创建表视图和填充相同的代码可以被视为在Xcode项目,你可以从下面的链接下载(如果要学习tableview的使用,可以参考其它的指南)。

初始化代码填入文件名的数组: 这样文件名全在数组了:

  1. -(id)init  
  2.  
  3.   if (self [super init])  
  4.    
  5.     arrayOfDocuments [[NSArray alloc] initWithObjects:   
  6.         @"iOSDevTips.png"@"Remodel.xls"@"Core J2ME Technology.pdf"nil];  
  7.    
  8.   return self;  
  9.  


下面的方法是采用QLPreviewControllerDataSource协议时,必要的两个之一,此方法通知??预览控制器,如何在预览导航列表中的呈现多少个项目是:

  1. (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller   
  2.  
  3.   return [arrayOfDocuments count];  
  4.  

这种呢,算是question type的events,就是问 文件从什么地方来,NSURL

  1. (id )previewController: (QLPreviewController *)controller previewItemAtIndex:(NSInteger)index   
  2.  
  3.   // Break the path into its components (filename and extension)  
  4.   NSArray *fileComponents [[arrayOfDocuments objectAtIndex: index] componentsSeparatedByString:@"."];  
  5.    
  6.   // Use the filename (index 0) and the extension (index 1) to get path  
  7.   NSString *path [[NSBundle mainBundle] pathForResource:[fileComponents objectAtIndex:0] ofType:[fileComponents objectAtIndex:1]];  
  8. //这个代码就体现了灵活性,你也可以写成 ofType .pdf   
  9.   return [NSURL fileURLWithPath:path];  
  10.  

项目中的其余代码是典型的iPhone/的iOS的东西,创建应用程序委托,委托的UIWindow中添加一个子视图(导航控制器),使窗口可见。我从下面的委托代码,在这里你可以得到更大的图片视图我如何设置此应用程序的视图控制器。

 

  1. (void)applicationDidFinishLaunching:(UIApplication *)application   
  2.     
  3.   // Create and initialize the window  
  4.   window [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];  
  5.    
  6.   // Create test view controller  
  7.   vc [[TestViewController alloc] init];  
  8.    
  9.   // Create navigation controller   
  10.   nav [[UINavigationController alloc] initWithRootViewController:vc];  
  11.    
  12.   [window addSubview:[nav view]];    
  13.   [window makeKeyAndVisible];  
  14.  

在选中特定行的时候,初始化QLPreviewController

  1.   
  2. (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath   
  3.    
  4.     // When user taps row, create the preview controller  
  5.     QLPreviewController *previewer [[[QLPreviewController alloc] init] autorelease];  
  6.   
  7.     // Set data source  
  8.     [previewer setDataSource:self];  
  9.     
  10.   // Which item to preview  
  11.     [previewer setCurrentPreviewItemIndex:indexPath.row];  
  12.   
  13.     // Push new viewcontroller, previewing the document  
  14.     [[self navigationController] pushViewController:previewer animated:YES];  
  15.  


 

值得一提的是预览控制器工作时,你有两种不同的选择。首先,你可以推到使用一个UINavigationController对象,你可以看到预览控制器的对象是我做了什么。预览我的应用程序生命在TestViewController这个对象控制器设置为导航控制器的根视图控制器。

第二种方法来显示预览控制器是模态,使用方法presentModalViewController。  //这个和我上篇fastpdfkit的讲法是一致的:

 

  1. #pragma mark -  
  2. #pragma mark QLPreviewControllerDataSource  
  3.   
  4. // Returns the number of items that the preview controller should preview  
  5. (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)previewController  
  6.  
  7.     return 5; //30//you can increase/decrease the this  
  8.  
  9.   
  10. // returns the item that the preview controller should preview  
  11. (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)idx  
  12.  
  13.     return fileURL;  
  14.  
  15.   
  16.   
  17. (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  
  18.  
  19.     // Return YES for supported orientations  
  20.     return (interfaceOrientation == UIInterfaceOrientationPortrait);  
  21.  

以上就是QLPreviewController的一些delegate,首先是预览页面数目,其次是我需要的URL(NSURL),最后是这个view的支持rotation程度

(浏览文档)UIDocumentInteractionController打开自己的第三方应用、使用QLPreviewController浏览文档

标签:ios开发   第三方应用   文档   

原文地址:http://blog.csdn.net/wangzhaobin/article/details/44943179

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!