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];
}
所要的资源文件可以 源码中找到。