【发布时间】:2014-09-23 15:54:55
【问题描述】:
由于 UIActivityViewController 上的 completionHandler 在 iOS 8 中已被弃用,有没有办法确定用户使用了哪个共享扩展/活动?
【问题讨论】:
标签: ios cocoa-touch ios8 uiactivityviewcontroller
由于 UIActivityViewController 上的 completionHandler 在 iOS 8 中已被弃用,有没有办法确定用户使用了哪个共享扩展/活动?
【问题讨论】:
标签: ios cocoa-touch ios8 uiactivityviewcontroller
您只需要使用新的处理程序UIActivityViewControllerCompletionWithItemsHandler:
typedef void (^UIActivityViewControllerCompletionWithItemsHandler)(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError);
这样称呼它:
[yourActivityVC setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError){
}];
此外,如果您想知道选择了什么项目,您只需要确保您的活动项目符合UIActivityItemSource 协议;
【讨论】:
setCompletionWithItemsHandler 仅适用于 iOS8。如果需要支持 iOS6-7 则:
[yourActivityVC setCompletionHandler:^(NSString *activityType, BOOL completed){
}];
【讨论】:
这是我们在 Swift 中使用的:
...
// Configure UIActivityViewController
let activityViewController = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
activityViewController.excludedActivityTypes = [UIActivityTypeAirDrop,
UIActivityTypeAddToReadingList,
UIActivityTypeAssignToContact,
UIActivityTypePrint,
UIActivityTypeCopyToPasteboard]
// Show UIActivityViewController
presentViewController(activityViewController, animated: true, completion: nil)
// Define completion handler
activityViewController.completionWithItemsHandler = doneSharingHandler
...
func doneSharingHandler(activityType: String?, completed: Bool, returnedItems: [AnyObject]?, error: NSError?) {
// Return if cancelled
if (!completed) {
return
}
// If here, log which activity occurred
println("Shared video activity: \(activityType)")
}
【讨论】: