16

由于新的 SDK 已发布(iOS 6),因此不推荐使用委托documentInteractionController:canPerformAction:方法UIDocumentInteractionControllerDelegate

使用该方法,您可以阻止默认操作,例如print:copy:出现。

该方法在当前版本的 iOS 6 中被调用,但在未来版本中不会调用该方法,并且我的应用程序将显示我不想支持的操作。

我阅读了 UIDocumentInteractionController 及其委托的可用文档,但我无法找到另一种方法来完成我在 canPerformAction 方法中所做的事情。

有任何想法吗?

另外,能够过滤邮件或推特(默认显示)等应用程序会很棒,但我想这是不可能的。

4

2 回答 2

8

同意在委托中弃用“canPerformAction”很麻烦的事实,我们失去了过去的细粒度控制。

但是,如果您只想允许在另一个应用程序中打开文档,并且想要删除 Copy、Print 甚至 Mail,我想您最好使用OpenIn方法版本来呈现UIDocumentInteractionController

即供您UIDocumentInteractionController使用presentOpenInMenuFromBarButtonItem:animated:presentOpenInMenuFromRect:inView:animated:

(而不是presentOptionsMenuFromBarButtonItem:animated:presentOptionsMenuFromRect:inView:animated:

这样,默认情况下,它只会显示可以打开文档的应用程序,并隐藏邮件、复制和打印。

于 2013-03-08T03:04:24.307 回答
6

我认为这是因为 Apple 希望您使用新的UIActivity控件。

这是文档:

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIActivity_Class/Reference/Reference.html

这是一个为支持许多第三方应用程序而开发的自定义控件:

http://www.cocoacontrols.com/platforms/ios/controls/uiactivitycollection

这个问题解决了你如何制作自己的UIActivity

https://stackoverflow.com/a/12766330/736384

因此,如果您不希望用户可以使用copy:print:方法,只需将此活动传递给UIActivityViewController,如下所示:

[activityView setExcludedActivityTypes:[NSArray arrayWithObjects:UIActivityTypeCopyToPasteboard, UIActivityTypePrint, nil]];

所有默认活动都列在 Apple 文档链接的底部。

于 2012-12-20T15:17:23.847 回答