本节书摘来自异步社区《iOS 6高级开发手册(第4版)》一书中的第2章,第2.5节秘诀:Quick Look预览控制器,作者 【美】Erica Sadun,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.5 秘诀:Quick Look预览控制器
iOS 6高级开发手册(第4版)
Quick Look预览控制器类允许用户预览许多文档类型。这个控制器支持文本、图像、PDF、RTF、iWork文件、Microsoft Office文档(Office 97及更高版本,包括doc、ppt、xls等)和逗号分隔的值(comma-separated value,csv)文件。你提供一种受支持的文件类型,Quick Look控制器将为用户显示它。集成的系统提供的活动视图控制器有助于共享预览的文档,如图2-6所示。
Quick Look控制器以模态方式展示,并且显示用户点按了动作按钮之后的屏幕。Quick Look控制器可以处理广泛的文档类型,使用户能够先查看文件内容,然后再决定要应用于它们的动作。大多数Quick Look类型都支持Mail(邮件)和Print(打印),其中许多类型支持Copy(复制),图像文件甚至提供了更多的选项
可以推送或展示预览控制器。控制器能够适应这两种情形,与导航栈和模态表示协同工作。秘诀2-5演示了两种方法。
2.5.1 实现Quick Look
Quick Look支持需要几个简单的步骤。
(1) 在主控制器类中声明QLPreviewControllerDataSource协议。
(2) 实现numberOfPreviewItemsInPreviewController:和previewController:previewItemAtIndex:数据源方法。其中第一个方法返回要预览的项目计数;第二个方法则返回索引所引用的预览项目。
(3) 预览项目必须遵守QLPreviewItem协议,该协议包含两个必需的属性:预览标题和项目URL。秘诀2-5创建了一个符合要求的QuickItem类,该类实现了一个绝对最低限度的方法,用于支持数据源。
在满足了所有这些要求之后,代码将准备好创建一个新的预览控制器,设置它的数据源,然后展示或推送它。
秘诀2-5 Quick Look
@interface QuickItem : NSObject <QLPreviewItem>
@property (nonatomic, strong) NSString *path;
@property (readonly) NSString *previewItemTitle;
@property (readonly) NSURL *previewItemURL;
@end
@implementation QuickItem
// Title for preview item
- (NSString *) previewItemTitle
{
return [_path lastPathComponent];
}
// URL for preview item
- (NSURL *) previewItemURL
{
return [NSURL fileURLWithPath:_path];
}
@end
#define FILE_PATH [NSHomeDirectory() \
stringByAppendingPathComponent:@"Documents/PDFSample.pdf"]
@interface TestBedViewController : UIViewController
<QLPreviewControllerDataSource>
@end
@implementation TestBedViewController
- (NSInteger) numberOfPreviewItemsInPreviewController:
(QLPreviewController *) controller
{
return 1;
}
- (id <QLPreviewItem>) previewController:
(QLPreviewController *) controller
previewItemAtIndex: (NSInteger) index;
{
QuickItem *item = [[QuickItem alloc] init];
item.path = FILE_PATH;
return item;
}
// Push onto navigation stack
- (void) push
{
QLPreviewController *controller =
[[QLPreviewController alloc] init];
controller.dataSource = self;
[self.navigationController
pushViewController:controller animated:YES];
}
// Use modal presentation
- (void) present
{
QLPreviewController *controller =
[[QLPreviewController alloc] init];
controller.dataSource = self;
[self presentViewController:controller
animated:YES completion:nil];
}
- (void) loadView
{
self.view.backgroundColor = [UIColor whiteColor];
self.navigationItem.rightBarButtonItem =
BARBUTTON(@"Push", @selector(push));
self.navigationItem.leftBarButtonItem =
BARBUTTON(@"Present", @selector(present));
}
@end