8

私のアプリでは、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 では完了ハンドラーが呼び出されないことを検出できました。

この動作の理由を見つけて、正常に動作するようにしてください。

前もって感謝します。

4

1 に答える 1

5

iOS 8 では、[開く] をタップすると、UIActivityViewController が自動的に閉じられます。したがって、 を呼び出すとself.superViewController dismissViewControllerAnimated:completion:、viewController は既に閉じられており、メソッドは何もしません (つまり、完了は呼び出されません)。

于 2015-03-05T14:47:56.873 に答える