在 + UIDocumentInteractionController 中打开:如何在 SDK iOS 6 中过滤选项(不推荐使用 canPerformActions)

Posted

技术标签:

【中文标题】在 + UIDocumentInteractionController 中打开:如何在 SDK iOS 6 中过滤选项(不推荐使用 canPerformActions)【英文标题】:Open in + UIDocumentInteractionController : how to filter options in SDK iOS 6 (canPerformActions is deprecated) 【发布时间】:2012-09-25 22:13:35 【问题描述】:

自从新的 SDK 发布 (ios 6) 以来,UIDocumentInteractionControllerDelegate 的委托方法 documentInteractionController:canPerformAction: 已弃用。

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

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

我阅读了 UIDocumentInteractionController 及其委托的可用文档,但我无法找到另一种方法来执行我在 canPerformAction 方法中所做的工作。

有什么想法吗?

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

【问题讨论】:

【参考方案1】:

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

但是,如果您只想允许在另一个应用程序中打开文档,并且想要删除复制、打印甚至邮件,我想您最好使用OpenIn 版本的方法来呈现@987654323 @?

即为您的UIDocumentInteractionController 使用presentOpenInMenuFromBarButtonItem:animated:presentOpenInMenuFromRect:inView:animated:

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

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

【讨论】:

这种方式使其他选项也无法使用(FB、Twitter 等)。如果有人想拥有 OpenIn 和 FB.. 怎么办? 在模拟器上可能没有安装应用程序打开内容,菜单不会显示。请参阅此问答:***.com/questions/23624218/… 顺便说一句,它不会使其他选项不可用。例如,这是目前分享到 Instagram 的唯一方式。 iOS 应用间共享/通信的悲惨状态。【参考方案2】:

我认为这是因为 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://***.com/a/12766330/736384

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

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

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

【讨论】:

嘿..谢谢你的回答!我没有看到即将到来的jaja我会深入研究这个,但乍一看它似乎是未来。再次感谢! so...如果这是真的,您将如何在另一个应用程序中打开文件(当前使用 UIDocumentInteractionController 的 openWith... 和 QuickLookPreview?)。 AFAICS 在 UIActivityViewController 中不支持此功能(除了 UIActivityViewController 也有一些非常严重的限制) 同意 auco - 你现在如何用 iOS6 打开... xlxs 或类似的?

以上是关于在 + UIDocumentInteractionController 中打开:如何在 SDK iOS 6 中过滤选项(不推荐使用 canPerformActions)的主要内容,如果未能解决你的问题,请参考以下文章

NOIP 2015 & SDOI 2016 Round1 & CTSC 2016 & SDOI2016 Round2游记

秋的潇洒在啥?在啥在啥?

上传的数据在云端的怎么查看,保存在啥位置?

在 React 应用程序中在哪里转换数据 - 在 Express 中还是在前端使用 React?

存储在 plist 中的数据在模拟器中有效,但在设备中无效

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据