开发者

No options in UIDocumentInteractionController

Is it possible to check how many applications are available on the device that are able to handle a particular file type? 开发者_高级运维 Basically, I have a button in my application that allows users to open-in another application, but I don't want to show it if there are no possible applications to open the document in.


Okay, so figured out an ugly ugly hack, but seemed to work... would love to find a better way.

Create header file for extension:

//  UIDocumentInteractionController+willShowOpenIn.h

#import <Foundation/Foundation.h>

@interface UIDocumentInteractionController (willShowOpenIn)
- (BOOL)willShowOpenIn;
+ (BOOL)willShowOpenInForURL:(NSURL *)filePathURL;
@end

And implement:

//  UIDocumentInteractionController+willShowOpenIn.m

#import "UIDocumentInteractionController+willShowOpenIn.h"

@implementation UIDocumentInteractionController (willShowOpenIn)
- (BOOL)willShowOpenIn
{
    id <UIDocumentInteractionControllerDelegate> oldDelegate = self.delegate;
    self.delegate = nil;
    UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:0];
    if([self presentOpenInMenuFromRect:window.bounds inView:window
                           animated:NO])
    {
        [self dismissMenuAnimated:NO];
        self.delegate = oldDelegate;
        return YES;
    }
    else {
        self.delegate = oldDelegate;
        return NO;
    }
}

+ (BOOL)willShowOpenInForURL:(NSURL *)filePathURL
{
    UIDocumentInteractionController *tempController = [UIDocumentInteractionController interactionControllerWithURL:filePathURL];
    return [tempController willShowOpenIn];
}
@end

Then use:

#import "UIDocumentInteractionController+willShowOpenIn.h"

...

NSURL *testURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"txt"]];
NSLog(@"Will show - %@",[UIDocumentInteractionController willShowOpenInForURL:testURL] ? @"YES" : @"NO");

Please tell me there is a better way :)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜