UIDocumentInteractionController不显示打印选项

180*_*ION 7 ios uidocumentinteraction

我有代码显示如下文档:

documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:self.thisUrl];

NSString *pathExtension = [self.thisUrl pathExtension];
if (pathExtension) {
    NSString *UTI = (__bridge NSString*)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)(pathExtension), NULL);
    if (UTI) {
        documentInteractionController.UTI = UTI;
    }
}
documentInteractionController.delegate = self;
[documentInteractionController presentOptionsMenuFromBarButtonItem:shareButton animated:YES];
Run Code Online (Sandbox Code Playgroud)

显示选项菜单时,它会显示可以打开文档的应用程序列表(例如消息),以及下面的操作列表.

选项菜单显示的列表操作与例如Mail应用程序中显示的菜单不同.

主要区别在于Mail应用程序显示"打印"选项,而我的选项菜单则没有.如何获取选项菜单以显示打印选项?

我的应用程序中显示的选项菜单

Mail中显示的选项菜单

编辑:我做了进一步测试,我实现了方法:

- (BOOL)documentInteractionController:(UIDocumentInteractionController *)controller canPerformAction:(SEL)action
{
  return YES;
}

- (BOOL)documentInteractionController:(UIDocumentInteractionController *)controller performAction:(SEL)action
{
  return YES; // or NO, doesn't matter
}
Run Code Online (Sandbox Code Playgroud)

这具有在弹出视图中显示"打印","复制"和"保存到相机胶卷"操作的效果.当我点击它们时没有发生任何事情,可能是因为我没有正确实施-performAction.我还在控制台日志中收到有关使用旧方法的警告.

这在某些方面是向后退一步,因为在添加这些方法之前,我无法再打印一些能够使用文档交互控制器正确打印的文档.

sle*_*rfx 2

Apple 鼓励您使用UIActivityViewController. 你可以轻松地实现这一目标。但是,仅当您的共享内容类型支持打印时,打印选项才可用。您可以在此处查看按数据类型支持的活动列表

- (IBAction)shareButton:(UIBarButtonItem *)sender
{
    NSString *textToShare = @"Text to share";
    NSURL *myWebContent = [NSURL URLWithString:@"http://yourpath.com/yourfile.pdf"]; // set your printable file here!

NSData *myData = [NSData dataWithContentsOfURL:myWebContent];


    NSArray *objectsToShare = @[textToShare, myData];

    UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil];

//Add exclusions here
    NSArray *excludeActivities = @[UIActivityTypeAirDrop,
                                   UIActivityTypeAssignToContact,
                                   UIActivityTypeSaveToCameraRoll,
                                   UIActivityTypeAddToReadingList,
                                   UIActivityTypePostToFlickr,
                                   UIActivityTypePostToVimeo];

    activityVC.excludedActivityTypes = excludeActivities;

    [self presentViewController:activityVC animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)