Я придумал менее хакерский способ действий, но есть ограничение, которое вы можете определить, есть ли совместимое приложение только после того, как пользователь выбрал его для открытия в приложении.Это позволит вам обеспечить тот же пользовательский интерфейс, что и в приложении Dropbox.
Все, что вам нужно сделать, - это установить UIDocumentInteractionControllerDelegate
и создать свойство логического флага, которое будет отображать, было ли представлено меню.
В интерфейсе:
/**
The document interaction controller used to present the 'Open with' dialogue.
*/
@property (nonatomic,strong) UIDocumentInteractionController *documentInteractionController;
/**
Boolen that holds whether or not there are apps installed that can open the URL.
*/
@property (nonatomic) BOOL hasCompatibleApps;
В реализации:
- (void)shareFileAtURL:(NSURL*)fileURL
{
[self setDocumentInteractionController:[UIDocumentInteractionController interactionControllerWithURL:fileURL]];
[[self documentInteractionController] setDelegate:self];
[self setHasCompatibleApps:NO];
[[self documentInteractionController] presentOpenInMenuFromRect:[self popoverRect] inView:[self popoverView] animated:YES];
if (![self hasCompatibleApps])
{
// Show an error message to the user.
}
}
#pragma mark - UIDocumentInteractionControllerDelegate methods
- (void)documentInteractionControllerWillPresentOpenInMenu:(UIDocumentInteractionController *)controller
{
[self setHasCompatibleApps:YES];
}
Надеюсь, это поможет некоторым людям.