我可以限制UIDocumentInteractionController中的导出选项吗?

时间:2015-10-20 20:00:25

标签: ios uidocumentinteraction

我正在ios App中生成PDF并通过UIDocumentInteractionController导出它。因为这是一个医疗应用程序,律师只会让我将文件导出到iBooks。我没有找到限制出口选择的方法,但想确认没有其他方法可以实现这一点。

2 个答案:

答案 0 :(得分:2)

据我所知,没有建议的方法来做到这一点。我使用下面的方法来阻止很多应用程序,但它是一个黑客。无论如何我会提出这个方法;也许你能找到比我更好的东西。

我们将使用下面的UIDocumentInteractionControllerDelegate方法限制可以打开文件网址的应用。

- (void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(NSString *)application
{
    // Only allow iBooks to open. 
    // I don't actually know the application string for iBooks, so I made this one up.
    if (![application isEqualToString:@"com.apple.iBooks"]) {
        // Deleting the document will prevent apps from opening the document and will not crash the app.
        [[NSFileManager defaultManager] removeItemAtURL:controller.URL error:nil];

        // Show an alert saying that the app is not allowed to open the PDF
        [controller dismissMenuAnimated:YES];
        UIAlertController *alertController = // make a UIAlertController with some message
        [self presentViewController:alertController animated:YES completion:nil];
    }
}

我再说一遍,这是非常hackish,可能不是最好的方式。此外,这仅阻止在共享时打开新应用的应用。如果选择要共享的“邮件”选项,则将打开模式MFMailComposeViewController,并且不会调用此方法。可能有其他应用程序的行为如此。

用你的意愿做到这一点。如果您找到更好的解决方案,请更新我们!

答案 1 :(得分:2)

使用UIActivityViewController和UIActivityItemSource。您可以删除除iBooks之外的所有系统服务,但不能阻止用户添加其他应用程序的共享扩展等活动。因此,活动视图的内容并不完全取决于您。但是UIActivityItemSource被告知请求进程的标识符,因此您可以将PDF提供给iBooks并将nil提供给其他人。