Since the new SDK was release (iOS 6), the delegate method documentInteractionController:canPerformAction:
of the UIDocumentInteractionControllerDelegate
is deprecated.
Using that method you were able to prevent default actions like print:
and copy:
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.
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.
I think it is because Apple wants you to use the new UIActivity control.
Here it's the documentation:
http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIActivity_Class/Reference/Reference.html
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With