《iOS 6高级开发手册(第4版)》——2.6节秘诀:添加QuickLook动作

本节书摘来自异步社区《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
上一篇:python 实现实时监控snapshot 状态


下一篇:手动为托管版K8S集群添加多可用区的节点