Open in + UIDocumentInteractionController : how to filter options in SDK iOS 6 (canPerformActions is deprecated)
Solution 1
I think it is because Apple wants you to use the new UIActivity control.
Here it's the documentation:
Here it's a custom control developed to support many third party apps:
http://www.cocoacontrols.com/platforms/ios/controls/uiactivitycollection
And this question solves how could you make your own UIActivity:
https://stackoverflow.com/a/12766330/736384
So, if you don't want the user can use copy: and print: methods just pass this activities to the UIActivityViewController, like this:
[activityView setExcludedActivityTypes:[NSArray arrayWithObjects:UIActivityTypeCopyToPasteboard, UIActivityTypePrint, nil]];
All the default activities are listed at the bottom of the Apple's documentation link.
Solution 2
Agreed on the fact that deprecating 'canPerformAction' in the delegate is troublesome, we lost the fine grain control we used to have.
However, if all you want is to allow a document to be opened in another app, and wanted to remove Copy, Print and even Mail, I guess you are better off using OpenIn
version of method to present the UIDocumentInteractionController
?
i.e. for your UIDocumentInteractionController
use presentOpenInMenuFromBarButtonItem:animated:
or presentOpenInMenuFromRect:inView:animated:
(instead of presentOptionsMenuFromBarButtonItem:animated:
or presentOptionsMenuFromRect:inView:animated:
)
This way, by default, it will only show apps that can open your document, and hides Mail, Copy and Print.
Omer
Ancient History: Graphic + 3D Designer and post-producer. Recent History: App Developer, mobile focused, UI/UX oriented. Present: Anti-Hero @OrangeLoops, watching Kezmo grow from the ground up. What's out there? Here: Kezmo CloseNet Some open source: OLSDynamicHeaderViewController
Updated on June 15, 2022Comments
-
Omer almost 2 years
Since the new SDK was release (iOS 6), the delegate method
documentInteractionController:canPerformAction:
of theUIDocumentInteractionControllerDelegate
is deprecated.Using that method you were able to prevent default actions like
print:
andcopy:
to appear.The method is being called in the current version of iOS 6, but in future versions this method will not be called and my app will show actions that I don't want to support.
I read the available documentation for the UIDocumentInteractionController and its delegate and I'm not able to find a another way to do what I do in the canPerformAction method.
Any ideas?
As a plus, it would be great to be able to filter apps like mail or twitter (that appears by default) but I guess that this is not possible.