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