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

由于 UIActivityViewController 上的 completionHandler 在 iOS 8 中已被弃用,有没有办法确定用户使用了哪个共享扩展/活动?

【问题讨论】:

    标签: ios cocoa-touch ios8 uiactivityviewcontroller


    【解决方案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)")
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-15
        • 1970-01-01
        • 2014-11-13
        • 2021-04-16
        相关资源
        最近更新 更多