Открыть в + UIDocumentInteractionController: как фильтровать параметры в SDK iOS 6 (canPerformActions устарел)

Поскольку новый SDK был выпущен (iOS 6), метод делегата documentInteractionController:canPerformAction: UIDocumentInteractionControllerDelegate устарел.

Используя этот метод, вы смогли предотвратить действия по умолчанию, такие как print: и copy:.

Метод вызывается в текущей версии iOS 6, но в будущих версиях этот метод не будет вызываться, и мое приложение покажет действия, которые я не хочу поддерживать.

Я прочитал доступную документацию для UIDocumentInteractionController и ее делегата, и я не могу найти другой способ сделать то, что я делаю в методе canPerformAction.

Любые идеи?

В качестве плюса было бы здорово фильтровать такие приложения, как почта или твиттер (что появляется по умолчанию), но я думаю, что это невозможно.

Ответы

Ответ 1

Я думаю, это потому, что 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:

fooobar.com/questions/88895/...

Итак, если вы не хотите, чтобы пользователь мог использовать copy: и print: методы просто передают эти действия в UIActivityViewController, например:

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

Все действия по умолчанию перечислены в нижней части ссылки документации Apple.

Ответ 2

Согласился на то, что неудобство "canPerformAction" в делегате является хлопотным, мы потеряли контроль мелкого зерна, который у нас был.

Однако, если вы хотите только разрешить открытие документа в другом приложении и хотите удалить Copy, Print и даже Mail, я думаю, вам лучше использовать версию метода OpenIn для представления UIDocumentInteractionController?

то есть. для вашего UIDocumentInteractionController используйте presentOpenInMenuFromBarButtonItem:animated: или presentOpenInMenuFromRect:inView:animated:

(вместо presentOptionsMenuFromBarButtonItem:animated: или presentOptionsMenuFromRect:inView:animated:)

Таким образом, по умолчанию он будет показывать приложения, которые могут открыть ваш документ, и скрывает почту, копию и печать.