私のアプリでは、TTOpenInAppActivity を使用して、UIActivityController 内に「開く」アクションを挿入しています。内部では次のように機能します。
一部のビュー コントローラーは、既に組み込まれている TTOpenInActivity を備えた UIActivityController を提示します。
-(void)openWithAction
{
NSURL *fileURL = SOME_URL;
CGRect rect = SOME_RECT;
TTOpenInAppActivity *openInAppActivity = [[TTOpenInAppActivity alloc] initWithView:self.view andRect:rect];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[fileURL] applicationActivities:@[openInAppActivity]];
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
// Store reference to superview (UIActionSheet) to allow dismissal
openInAppActivity.superViewController = activityViewController;
// Show UIActivityViewController
[self presentViewController:activityViewController animated:YES completion:NULL];
} else {
// code for iPad, irrelevant
}
}
ユーザーが「開く」ボタンをタップすると、次のメソッドがトリガーされます。
- (void)performActivity
{
if(!self.superViewController){
[self activityDidFinish:YES];
return;
}
// Dismiss activity view
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
// iPhone dismiss UIActivityViewController
[self.superViewController dismissViewControllerAnimated:YES completion:^(void){
if (self.fileURLs.count > 1) {
[self openSelectFileActionSheet];
}
else {
// Open UIDocumentInteractionController
[self openDocumentInteractionControllerWithFileURL:self.fileURLs.lastObject];
}
}];
} else {
// code for iPad, irrelevant
}
}
}
このアプリは iPhone 専用であるため、次のコードを実行する必要があります。
[self.superViewController dismissViewControllerAnimated:YES completion:^(void){
if (self.fileURLs.count > 1) {
[self openSelectFileActionSheet];
}
else {
// Open UIDocumentInteractionController
[self openDocumentInteractionControllerWithFileURL:self.fileURLs.lastObject];
}
}];
iOS7 では、すべて正常に動作します。iOS8 では UIActivityController が閉じられ、何も起こりません。デバッグ中に、iOS8 では完了ハンドラーが呼び出されないことを検出できました。
この動作の理由を見つけて、正常に動作するようにしてください。
前もって感謝します。