本节书摘来自异步社区《iOS 6高级开发手册(第4版)》一书中的第2章,第2.6节秘诀:添加QuickLook动作,作者 【美】Erica Sadun,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.6 秘诀:添加QuickLook动作
iOS 6高级开发手册(第4版)
值得注意的是,QuickLook不存在于系统提供的活动视图控制器所展示的标准动作集中。你可以轻松地添加一个自定义的动作以提供这种特性,从而提供与秘诀2-5创建的相同预览。这就是秘诀2-6所做的工作,它把秘诀2-5的功能包装进一个自定义的QLActivity类中。
秘诀2-6将对符合要求的项目执行比你在本章中已经见过的更彻底的搜索。它将搜索传递给它的项目数组,直至找到一个本地文件URL,它可以将其用于文档预览。如果它没有找到这样一个URL,就会从canPerformWithActivityItems:方法返回NO,并且不会列出在活动控制器上。
秘诀2-6 Quick Look
@implementation QLActivity
{
NSArray *items;
NSArray *qlitems;
QLPreviewController *controller;
}
// Activity Customization
- (NSString *)activityType
{
return @"CustomQuickLookActivity";
}
- (NSString *) activityTitle
{
return @"QuickLook";
}
- (UIImage *) activityImage
{
return [UIImage imageNamed:@"QL.png"];
}
// Items must include at least one file URL
- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems
{
for (NSObject *item in activityItems)
if ([item isKindOfClass:[NSURL class]])
{
NSURL *url = (NSURL *)item;
if (url.isFileURL) return YES;
}
return NO;
}
// QuickLook callbacks
- (NSInteger) numberOfPreviewItemsInPreviewController:
(QLPreviewController *) controller
{
return qlitems.count;
}
- (id <QLPreviewItem>) previewController: (QLPreviewController *)
controller previewItemAtIndex: (NSInteger) index;
{
return qlitems[index];
}
// Item preparation
- (void)prepareWithActivityItems:(NSArray *)activityItems
{
items = activityItems;
controller = [[QLPreviewController alloc] init];
controller.dataSource = self;
controller.delegate = self;
NSMutableArray *finalArray = [NSMutableArray array];
for (NSObject *item in items)
{
if ([item isKindOfClass:[NSURL class]])
{
NSURL *url = (NSURL *)item;
if (url.isFileURL)
{
QuickItem *item = [[QuickItem alloc] init];
item.path = url.path;
[finalArray addObject:item];
}
}
}
qlitems = finalArray;
}
- (void) previewControllerDidDismiss:
(QLPreviewController *)controller
{
[self activityDidFinish:YES];
}
- (UIViewController *) activityViewController
{
return controller;
}
@end