确定使用了哪个共享扩展
Posted
技术标签:
【中文标题】确定使用了哪个共享扩展【英文标题】:Determine which share extension was used 【发布时间】:2014-09-23 15:54:55 【问题描述】:由于 UIActivityViewController
上的 completionHandler
在 ios 8 中已被弃用,有没有办法确定用户使用了哪个共享扩展/活动?
【问题讨论】:
【参考方案1】:您只需要使用新的处理程序UIActivityViewControllerCompletionWithItemsHandler
:
typedef void (^UIActivityViewControllerCompletionWithItemsHandler)(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError);
这样称呼它:
[yourActivityVC setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError)
];
此外,如果您想知道选择了什么项目,您只需要确保您的活动项目符合UIActivityItemSource
协议;
UIActivityItemSource Protocol Documentation
【讨论】:
嗯,很奇怪。 Apple 没有在文档中仅在 API 差异中提及这一点...谢谢!【参考方案2】:setCompletionWithItemsHandler 仅适用于 iOS8。如果需要支持 iOS6-7 则:
[yourActivityVC setCompletionHandler:^(NSString *activityType, BOOL completed)
];
【讨论】:
【参考方案3】:这是我们在 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)")
【讨论】:
以上是关于确定使用了哪个共享扩展的主要内容,如果未能解决你的问题,请参考以下文章