UIActivityViewControllerCompletionHandler How to?

后端 未结 5 1749
予麋鹿
予麋鹿 2021-02-02 10:05

I am trying to use the UIActivityViewControllerCompletionHandler , but i dont quite get how..

I want to detect when the user finishes or dismisses this

相关标签:
5条回答
  • 2021-02-02 10:42
    typedef void (^UIActivityViewControllerCompletionHandler)
        (NSString *activityType, BOOL completed);
    

    The second parameter of the completion handler tells you whether the user dismissed the controller. If they dismissed the controller, completed will be set to NO.

    There's more details in the completion handler's documentation.

    0 讨论(0)
  • 2021-02-02 10:51

    With iOS 8 completionHandler is deprecated, so you will want to provide alternative completionWithItemsHandler. It also allows to handle if extension modified data you set (say Photo extension). See Documentation

        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
            };
        }
    
    0 讨论(0)
  • 2021-02-02 10:53

    Here's how you show a sharing dialog and set its completion handler

    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];
    
    0 讨论(0)
  • 2021-02-02 10:53

    For Swift, this one works for me...

        // 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)")
    }
    
    0 讨论(0)
  • 2021-02-02 10:55

    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)")
    }
    
    0 讨论(0)
提交回复
热议问题