ios 4 sdk中支技文档的预览功能,何为预览?就是你打印文件时的预览功能。其用到quicklook.framework,它支持的文档格式有:iWork documents, Microsoft Office, Rich Text Format, PDF, images, text files and comma-separated (csv) files.
今天show一个demo,展示其用法:
第一步:创建一个基于view的工程,并加入quicklook.framewrok
第二步:修改Controller的头文件如下:
#import <QuickLook/QuickLook.h> @interface TestViewController : UITableViewController <QLPreviewControllerDataSource> { NSArray *arrayOfDocuments; } @end
修改 controller执行文件如下
#import "TestViewController.h" @implementation TestViewController #pragma mark - #pragma mark Initialization /*--------------------------------------------------------------------------- * *--------------------------------------------------------------------------*/ -(id)init { if (self = [super init]) { arrayOfDocuments = [[NSArray alloc] initWithObjects: @"iOSDevTips.png", @"Remodel.xls", @"Core J2ME Technology.pdf", nil]; } return self; } /*--------------------------------------------------------------------------- * *--------------------------------------------------------------------------*/ - (void)loadView { [super loadView]; [self setTitle:@"Files Available for Preview"]; } #pragma mark - #pragma mark Table Management // Customize the number of sections in the table view. /*--------------------------------------------------------------------------- * *--------------------------------------------------------------------------*/ - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } /*--------------------------------------------------------------------------- * *--------------------------------------------------------------------------*/ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [arrayOfDocuments count]; } /*--------------------------------------------------------------------------- * *--------------------------------------------------------------------------*/ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"tableRow"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; // ??? [[cell textLabel] setText:[arrayOfDocuments objectAtIndex:indexPath.row]]; [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; return cell; } /*--------------------------------------------------------------------------- * *--------------------------------------------------------------------------*/ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // When user taps a row, create the preview controller QLPreviewController *previewer = [[[QLPreviewController alloc] init] autorelease]; // Set data source [previewer setDataSource:self]; // Which item to preview [previewer setCurrentPreviewItemIndex:indexPath.row]; // Push new viewcontroller, previewing the document [[self navigationController] pushViewController:previewer animated:YES]; } #pragma mark - #pragma mark Preview Controller /*--------------------------------------------------------------------------- * *--------------------------------------------------------------------------*/ - (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller { return [arrayOfDocuments count]; } /*--------------------------------------------------------------------------- * *--------------------------------------------------------------------------*/ - (id <QLPreviewItem>)previewController: (QLPreviewController *)controller previewItemAtIndex:(NSInteger)index { // Break the path into it's components (filename and extension) NSArray *fileComponents = [[arrayOfDocuments objectAtIndex: index] componentsSeparatedByString:@"."]; // Use the filename (index 0) and the extension (index 1) to get path NSString *path = [[NSBundle mainBundle] pathForResource:[fileComponents objectAtIndex:0] ofType:[fileComponents objectAtIndex:1]]; return [NSURL fileURLWithPath:path]; } #pragma mark - #pragma mark Cleanup /*--------------------------------------------------------------------------- * *--------------------------------------------------------------------------*/ - (void)dealloc { // Free up all the documents [arrayOfDocuments release]; [super dealloc]; } @end
修改Appdelegate如下
- (void)applicationDidFinishLaunching:(UIApplication *)application { // Create and initialize the window window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Create test view controller vc = [[TestViewController alloc] init]; // Create navigation controller nav = [[UINavigationController alloc] initWithRootViewController:vc]; [window addSubview:[nav view]]; [window makeKeyAndVisible]; }
所要的资源文件可以源码中找到。