如何将iOS“Open In ...”功能添加到应用程序

时间:2012-04-21 22:44:52

标签: objective-c ios

我想知道如何从我的应用程序中呈现“Open In ...”动作表(iPhone)/ Popover(iPad),最好是IBAction

我希望它类似于声明文件类型然后创建视图并打开用户选择的应用程序,但我知道它比那更复杂。

我意识到在StackOverflow上已经提出了类似的问题,但是我无法理解接受的答案:How to use "open in..." feature to iOS app?,我在文档交互编程中找到了一些Apple文档。但是,我真的无法理解这些。

3 个答案:

答案 0 :(得分:13)

使用UIDocumentInteractionController类方法创建interactionControllerWithURL:(传递您要在其他应用中打开的文件的网址)。

然后拨打presentOpenInMenuFromRect:inView:animated:presentOpenInMenuFromBarButtonItem:animated:。控制器负责向popover显示该文件类型的可用应用程序并打开所选应用程序。

如果您想知道菜单何时被解雇以及选择了哪个应用,您需要实施UIDocumentInteractionControllerDelegate协议。

答案 1 :(得分:5)

omz 在他的回答中提出了一些关于如何做到这一点的好点,但是在iOS 6中引入新API这个过程要容易得多。这是一种简单有效的方法在iOS 6及更高版本中显示UIActionSheet Open-In-Menu:

NSArray *dataToShare = @[contentData];  //Or whatever data you want to share - does not need to be an NSArray
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:dataToShare applicationActivities:nil];
[self presentViewController:activityViewController animated:YES completion:nil];

此外,如果您的应用与低于6.0的iOS版本兼容,您可能需要检查共享服务是否存在:

if ([UIActivityViewController class])

一旦您出示工作表,iOS将自动为您处理其余工作。它会显示一个漂亮的,其中的图标显示了用户可以打开/共享您的数据的每个应用或服务:

iOS 6 Share Sheet

请注意,根据数据的内容,iOS将在共享表中显示不同的服务

编辑:上述方法共享文件内容,但不共享文件本身。有关详情,请参阅 omz 的回答。

答案 2 :(得分:2)