Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Open in + UIDocumentInteractionController : how to filter options in SDK iOS 6 (canPerformActions is deprecated)

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.

like image 940
Omer Avatar asked Sep 25 '12 22:09

Omer


2 Answers

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.

like image 159
P.L. Avatar answered Nov 16 '22 17:11

P.L.


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.

like image 40
Luis Ascorbe Avatar answered Nov 16 '22 17:11

Luis Ascorbe