6

Apple 的 UIDocumentInteractionController presentOpenInMenuFromBarButtonItem:animated: 方法文档指出“如果没有注册的应用程序支持打开文档,则文档交互控制器不会显示菜单。” 在我的应用程序中,当且仅当设备上有一个可以打开它的应用程序时,我才想显示一个按钮。(我只希望按钮弹出菜单来打开文件;我不想要 QuickLook、Copy 或 Print)。就目前的情况而言,如果按钮在那里,但没有注册可以打开相关文件的应用程序,用户会得到一个在点击时什么都不做的按钮的不令人满意的体验。

那么 - 我可以找出是否有任何/没有支持打开特定文档类型的注册应用程序?显然,UIDocumentInteractionController 实例可以找出这一点。是否有公共 API 方法可以找到它?

4

2 回答 2

11

好的,更多的研究表明,stackoverflow 用户frenchkiss-dev有一个解决方案——源于比我更仔细地阅读文档和一些横向思考。下面的代码基于 frenchkiss-dev 的回答,位于 ViewDidAppear 方法中,如果打开然后关闭打开文件菜单(没有动画)显示没有可以处理打开文件的应用程序,则禁用我的按钮。此代码段的上下文是 UIDocumentInteractionController 已在 viewDidLoad 中设置并通过 [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];
}
于 2011-06-04T01:31:21.903 回答
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];
    }


}
于 2013-10-10T16:11:51.053 回答