25

私はを使おうとしていますがUIActivityViewControllerCompletionHandler 、どうすればいいのかわかりません。

ユーザーがこのViewControllerを終了または終了したときを検出したい(UIActivityViewController)。

誰もが方法を知っていますか?

4

5 に答える 5

70

共有ダイアログを表示し、その完了ハンドラを設定する方法は次のとおりです

NSArray *imageArray = [NSArray arrayWithObject:shareImage];

UIActivityViewController *sharing = [[UIActivityViewController alloc] initWithActivityItems:imageArray applicationActivities:nil];

[sharing setCompletionHandler:^(NSString *activityType, BOOL completed) {
    NSLog(@"completed dialog - activity: %@ - finished flag: %d", activityType, completed);
}];

[self presentViewController:sharing animated:YES completion:nil];
于 2012-10-02T01:21:09.553 に答える
25

iOS 8completionHandlerでは非推奨になっているため、代替手段を提供する必要がありますcompletionWithItemsHandler。また、拡張機能が設定したデータを変更したかどうかを処理することもできます (写真拡張機能など)。ドキュメントを見る

    UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[text, URL, image] applicationActivities:nil];
    activityViewController.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeAirDrop, UIActivityTypeAddToReadingList];

    // check if new API supported
    if ([activityViewController respondsToSelector:@selector(completionWithItemsHandler)]) {
        activityViewController.completionWithItemsHandler = ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
            // When completed flag is YES, user performed specific activity
        };
    } else {
        activityViewController.completionHandler = ^(NSString *activityType, BOOL completed) {
            // When completed flag is YES, user performed specific activity
        };
    }
于 2015-02-13T14:03:35.543 に答える
19
typedef void (^UIActivityViewControllerCompletionHandler)
    (NSString *activityType, BOOL completed);

完了ハンドラーの 2 番目のパラメーターは、ユーザーがコントローラーを閉じたかどうかを示します。彼らがコントローラを却下した場合、completedは に設定されNOます。

詳細については、完了ハンドラのドキュメントを参照してください。

于 2012-09-23T18:08:08.990 に答える