Apple的UIDocumentInteractionController文档presentOpenInMenuFromBarButtonItem:animated:方法声明“如果没有支持打开文档的注册应用程序,文档交互控制器不会显示菜单。”在我的应用中,我想显示一个按钮当且仅当设备上有应用程序打开它时。 (我只希望按钮弹出一个菜单来打开文件;我不想要QuickLook,复制或打印)。事实上,如果按钮在那里,但没有注册可以打开相关文件的应用程序,则用户会获得令人不满意的按钮体验,该按钮在点按时不会执行任何操作。
那么 - 我能否知道是否有任何/不支持打开特定文档类型的注册应用程序?显然,UIDocumentInteractionController实例可以找到它。是否有公共API方法可以找到它?
答案 0 :(得分:11)
好的,更多的研究表明stackoverflow用户frenchkiss-dev有一个solution - 源于比我更仔细地阅读文档和一些横向思维。我的代码基于frenchkiss-dev的答案,位于ViewDidAppear方法中,如果打开然后关闭打开的文件菜单(没有动画),则会禁用我的按钮,这表明没有可以处理打开文件的应用程序。此代码段的上下文是已在viewDidLoad中设置了UIDocumentInteractionController,并通过[self docInteractionController]进行访问。
BOOL isAnAppToOpenURL = [[self docInteractionController] presentOpenInMenuFromRect:CGRectZero inView:[self view] animated: NO];
[[self docInteractionController] dismissMenuAnimated:NO];
if (!isAnAppToOpenURL)
{
// iOS think NO app is present on the device that
// can open the URL set on the UIDocumentInteractionController
[[self openFileButton] setEnabled:NO];
}
答案 1 :(得分:1)
//Connect up theOpenInBtn in IB
@interface DocumentViewerViewController ()
{
IBOutlet UIWebView *webView;
NSURL *fileURL;
NSData *fileOnline;
UIDocumentInteractionController *dic;
IBOutlet UIBarButtonItem *theOpenInBtn;
}
(void)viewDidLoad
{
[super viewDidLoad];
BOOL isAnAppToOpenURL = [dic presentOpenInMenuFromRect:CGRectZero inView:[self view] animated: NO];
[dic dismissMenuAnimated:NO];
if (!isAnAppToOpenURL)
{
// iOS think NO app is present on the device that
// can open the URL set on the UIDocumentInteractionController
[theOpenInBtn setEnabled:NO];
}
}