UIActivityViewControllerCompletionHandler
を使おうとしていますが、どうすればよいかわかりません。
ユーザーがこれを終了または却下したときを検出したいビューコントローラー(UIActivityViewController
)。
誰もが方法を知っていますか?
typedef void (^UIActivityViewControllerCompletionHandler)
(NSString *activityType, BOOL completed);
完了ハンドラーの2番目のパラメーターは、ユーザーがコントローラーを閉じたかどうかを示します。彼らがコントローラーを却下した場合、completed
はNO
に設定されます。
詳細については、 完了ハンドラーのドキュメント を参照してください。
共有ダイアログを表示し、その完了ハンドラーを設定する方法は次のとおりです
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];
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
};
}
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)")
}