我想知道如何从我的应用程序中呈现“打开方式...”操作表(iPhone)/弹出框(iPad),最好是 IBAction
我希望它类似于声明文件类型然后创建视图并打开用户选择的应用程序,但我知道它更复杂。
我意识到在 StackOverflow 上提出了类似的问题,但我无法理解被接受的答案:How to use "open in..." feature to iOS app? ,并且我找到了一些关于文档交互编程的 Apple 文档。但是,我真的无法理解这些。
我想知道如何从我的应用程序中呈现“打开方式...”操作表(iPhone)/弹出框(iPad),最好是 IBAction
我希望它类似于声明文件类型然后创建视图并打开用户选择的应用程序,但我知道它更复杂。
我意识到在 StackOverflow 上提出了类似的问题,但我无法理解被接受的答案:How to use "open in..." feature to iOS app? ,并且我找到了一些关于文档交互编程的 Apple 文档。但是,我真的无法理解这些。
UIDocumentInteractionController
使用类方法创建一个interactionControllerWithURL:
(传递您要在另一个应用程序中打开的文件的 URL)。
然后调用presentOpenInMenuFromRect:inView:animated:
或presentOpenInMenuFromBarButtonItem:animated:
。控制器负责向弹出窗口显示该文件类型的可用应用程序并打开选定的应用程序。
如果您想知道菜单何时关闭以及选择了哪个应用程序,则需要实现该UIDocumentInteractionControllerDelegate
协议。
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 将自动为您处理其余部分。它将显示一个漂亮的uiactionsheet图标,显示用户可以打开/共享您的数据的每个应用程序或服务:
注意,根据数据的内容,iOS 会在 Share Sheet 中显示不同的服务
编辑:上面的方法共享文件内容,但不共享文件本身。有关更多信息,请参阅omz的答案。
我个人从来没有这样做过,但您的答案肯定可以在此 Apple 文档中找到:http: //developer.apple.com/library/ios/#documentation/FileManagement/Conceptual/DocumentInteraction_TopicsForIOS/Articles/PreviewingandOpeningItems。 html#//apple_ref/doc/uid/TP40010410-SW1。