虽然我们显然无法在iOS上检索已安装应用程序的列表,但有什么技巧可以让我们确定为给定文件类型注册的应用程序列表吗?也就是说,用户将在"打开方式…"菜单中看到该特定文件类型的列表。canOpenURL只返回一个布尔值,但理想情况下,它会向我们返回一个受支持的已安装应用程序的列表。
UIDocumentInteractionController
当然可以打开。您只需要实例化UIDocumentInteractionController实例:
//Following in header file:
UIDocumentInteractionController *docInteractionController;
实施委托:
<UIDocumentInteractionControllerDelegate>
.m:
//Here the url is the document URL that you want to open (or you want to apply open in functionality)
self.docInteractionController = [UIDocumentInteractionController interactionControllerWithURL:url];
self.docInteractionController.delegate = self;
Open In方法如下:
- (void) openIn: (id) sender {
[self.docInteractionController presentOptionsMenuFromBarButtonItem:sender animated:YES];
}
完成后:
[self.docInteractionController dismissMenuAnimated:YES];
就是这样。这将列出文档支持的应用程序列表,选择它们后,将使用我们实例化的文档URL启动相应的应用程序。
我怀疑你的两个问题("确定给定文件类型的应用程序列表"或"如何实现‘打开…’")在当前版本的iOS中是否可行,因为用户在主屏幕上看不到显示应用程序的单个文件。应用程序也不能执行"用这个特定文件打开一个单独的应用程序"事件(这在带有Apple Events的Macintosh上很容易实现)。
但这些听起来确实是一个很好的功能请求,你可以在http://bugreporter.apple.com(如果你是注册的苹果开发者,你可以登录)。如果有足够多的人要求这些功能(而潜在的"开放…"功能确实是一个经常被要求的功能),苹果将强烈考虑在未来的iOS版本中包括这些功能。
您可以看到这个示例程序。它可能会对你有所帮助。它使用了UIDocumentaInteractionController类实例及其属性UTI(唯一类型标识符)。它有助于检索手机上已安装的应用程序列表,这些应用程序支持您在应用程序中打开的文件类型。您可能需要根据您的方便稍微重写UTI属性
http://developer.apple.com/library/ios/#samplecode/DocInteraction/Introduction/Intro.html