2012-09-23 11 views
23

मैं UIActivityViewControllerCompletionHandler उपयोग करने के लिए कोशिश कर रहा हूँ, लेकिन मैं काफी न मिल कैसे ..UIActivityViewControllerCompletionHandler कैसे करें?

मैं जब उपयोगकर्ता खत्म पता लगाने के लिए चाहते हैं या इस दृश्य नियंत्रक (UIActivityViewController) को खारिज करते।

कोई भी जानता है कि कैसे?

उत्तर

18
typedef void (^UIActivityViewControllerCompletionHandler) 
    (NSString *activityType, BOOL completed); 

पूरा करने वाले हैंडलर का दूसरा पैरामीटर आपको बताता है कि उपयोगकर्ता ने नियंत्रक को खारिज कर दिया है या नहीं। अगर उन्होंने नियंत्रक को खारिज कर दिया, completedNO पर सेट किया जाएगा।

the completion handler's documentation में और जानकारी है।

+1

अरे यार, मैं कैसे पता कर सकते हैं कि क्या मैं पोस्ट सफलतापूर्वक है? चूंकि पोस्ट वास्तव में असफल रहा है, "पूरा" भी रहता है हां/1 - स्वर्ग – Paradise

65

यहाँ कैसे आप एक साझा संवाद दिखाने के लिए और iOS 8 completionHandler के साथ इसके पूरा होने हैंडलर

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]; 
+2

अरे दोस्त, मैं कैसे जान सकता हूं कि मैंने सफलतापूर्वक पोस्ट किया है या नहीं? चूंकि पोस्ट वास्तव में असफल रहा है, "पूरा" भी रहता है हां/1 – Paradise

+1

यह दृष्टिकोण आईओएस 8 में बहिष्कृत है। – Praxiteles

19

निर्धारित करते हैं, पदावनत है ताकि आप विकल्प completionWithItemsHandler प्रदान करना चाहते हैं जाएगा। यह आपके द्वारा सेट किए गए एक्सटेंशन संशोधित डेटा (फ़ोटो एक्सटेंशन कहें) को संभालने की अनुमति देता है। देखें 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 
     }; 
    } 
-1

स्विफ्ट के लिए, यह एक मेरे लिए काम करता ...

 
    // 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

क्या आप ब्लॉक घोषणा के रूप में एक किया गया शेरिंगहैंडलर जोड़ सकते हैं? –

संबंधित मुद्दे