web-dev-qa-db-ja.com

UIActivityViewControllerCompletionHandler方法は?

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

ユーザーがこれを終了または却下したときを検出したいビューコントローラーUIActivityViewController)。

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

24
Oblieapps
typedef void (^UIActivityViewControllerCompletionHandler)
    (NSString *activityType, BOOL completed);

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

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

19
sobri

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

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];
67
thgc

IOS 8では、completionHandler非推奨であるため、代替の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
        };
    }
21
Anton Gaenko

Swift 5:

func showShareOf(url: URL, title: String) {
    let shareItems: [Any] = ["\(title)\n", url]
    let activityVC = UIActivityViewController(activityItems: shareItems, applicationActivities: nil)
    activityVC.completionWithItemsHandler = doneSharingHandler
    self.present(activityVC, animated: true, completion: nil)
}

@objc func doneSharingHandler(activityType: UIActivity.ActivityType?, completed: Bool, _ returnedItems: [Any]?, error: Error?) {
    if (!completed) { return }
    // If here, log which activity occurred
    print("Shared activity: \(activityType)")
}
1
Bill Patterson