确定使用了哪个共享扩展

Posted

技术标签:

【中文标题】确定使用了哪个共享扩展【英文标题】:Determine which share extension was used 【发布时间】:2014-09-23 15:54:55 【问题描述】:

由于 UIActivityViewController 上的 completionHandlerios 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)")

【讨论】:

以上是关于确定使用了哪个共享扩展的主要内容,如果未能解决你的问题,请参考以下文章

Qt中多个定时器共享一个槽函数,怎么确定是哪个定时器超时呢?

如何确定我的计算机正在使用哪个网络适配器?

使用 C#,如何确定是哪个进程锁定了文件?

确定在使用按钮数组时单击了哪个提交按钮

如何确定单击了哪个单元格?

确定使用了哪个提交按钮?