2013-01-04 37 views
36

आईडी को ट्रैक करने में सक्षम होना पसंद है अगर उपयोगकर्ता फेसबुक, ट्विटर, आदि द्वारा साझा किया गया है, लेकिन ऐसा लगता है कि यह तरीका जानने के लिए कोई तरीका नहीं है कि कौन सी विधि चुनी गई थी। है?UIActivityViewController - क्या यह जानने का कोई तरीका है कि कौन सी गतिविधि का चयन किया गया था?

+4

हमेशा अच्छा एक सवाल है कि मैं पूछने के लिए जा रहा था देखने के लिए। – Morkrom

उत्तर

39

आप में निर्मित गतिविधि प्रकार कौन-प्रणाली के लिए निर्मित समर्थन किया है setCompletionHandler

UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil]; 

[activityVC setCompletionHandler:^(NSString *activityType, BOOL completed) { 
    if([activityType isEqualToString: UIActivityTypeMail]){ 
     NSLog(@"Mail"); 
    } 
    if([activityType isEqualToString: UIActivityTypePostToFacebook]){ 
     NSLog(@"Facebook"); 
    } 

}]; 
[self presentViewController:activityVC animated:TRUE completion:nil]; 

में गतिविधि प्रकार का उपयोग कर सकते हैं।

NSString *const UIActivityTypePostToFacebook; 

NSString *const UIActivityTypePostToTwitter; 

NSString *const UIActivityTypePostToWeibo; 

NSString *const UIActivityTypeMessage; 

NSString *const UIActivityTypeMail; 

NSString *const UIActivityTypePrint; 

NSString *const UIActivityTypeCopyToPasteboard; 

NSString *const UIActivityTypeAssignToContact; 

NSString *const UIActivityTypeSaveToCameraRoll; 

iOS 8

कृपया ध्यान दें कि इस iOS 8 में एक संकलक चेतावनी उत्पन्न होगा के लिए संपादित, आप setCompletionHandler विधि के बजाय setCompletionWithItemsHandler विधि का उपयोग करने की जरूरत है।

बदलें:

[activityVC setCompletionHandler:^(NSString *activityType, BOOL completed) { 

साथ:

[activityVC setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) { 
+1

धन्यवाद यह सहायक है! यह अच्छा है अगर मुझे पता होना चाहिए कि उन्होंने बाद में क्या चुना है, जो मैं करता हूं, लेकिन मुझे पहले भी जानना होगा। उदाहरण के लिए यदि कोई ट्विटर बटन हिट करता है, तो मैं फेसबुक – Adam

+0

के साथ एक अलग संदेश प्रदर्शित करना चाहता हूं, आपको अपनी कस्टम डेटा ऑब्जेक्ट्स को कार्यान्वित करने की आवश्यकता होगी जो 'UIActivityItemSource' प्रोटोकॉल के अनुरूप हों। फिर आप अपने डेटा को गतिविधि प्रकार के विशिष्ट प्रारूप में प्रस्तुत कर सकते हैं (या केवल प्रकार को ट्रैक करें)। [एनएसएचप्स्टर] (http://nshipster.com/uiactivityviewcontroller/) में सभी विवरण हैं। – hagi

+0

केवल मेल विकल्प प्रदर्शित है ?? एकाधिक विकल्प कैसे जोड़ सकते हैं? –

1

तुम सिर्फ अपने प्रोटोकॉल को लागू करने से गतिविधि के द्वारा पहचान करने के लिए जो गतिविधि को छुआ गया है और वापस जाने के कस्टम डेटा इस lib https://github.com/rdougan/RDActivityViewController उपयोग कर सकते हैं।

इस तरह

:

- (NSArray *)activityViewController:(NSArray *)activityViewController itemsForActivityType:(NSString *)activityType 
{ 
    if ([activityType isEqualToString:UIActivityTypePostToTwitter]) { 
     return @[@"Twitter text"]; 
    } else if ([activityType isEqualToString:UIActivityTypeMessage]) { 
     return @[@"Message text"]; 
    } else if ([activityType isEqualToString:UIActivityTypeMail]) { 
     return @[@"Mail text"]; 
    } else if ([activityType isEqualToString:UIActivityTypePostToFacebook]) { 
     return @[@"Facebook text"]; 
    } else { 
     return @[@"Default text"]; 
    } 
} 

मुझे आशा है कि मैं तुम्हें मदद की है!

+4

इस प्रोटोकॉल कॉल के कारण बस मेरे ऐप को खारिज कर दिया गया। जाहिर है यह एक निजी एपीआई है। इस पुस्तकालय का प्रयोग न करें। –

17

स्विफ्ट 2 में:

activityViewController.completionWithItemsHandler = { activity, success, items, error in 

     if !success{ 
     print("cancelled") 
     return 
     } 

     if activity == UIActivityTypePostToTwitter { 
     print("twitter") 
     } 

     if activity == UIActivityTypeMail { 
     print("mail") 
     } 

    } 
2

तेज 3

let activityViewController:UIActivityViewController = UIActivityViewController(activityItems: [screenCapture], applicationActivities: nil) 
activityViewController.excludedActivityTypes = [UIActivityType.print, UIActivityType.postToWeibo, UIActivityType.copyToPasteboard, UIActivityType.addToReadingList, UIActivityType.postToVimeo] 

activityViewController.completionWithItemsHandler = { activity, success, items, error in 
    if !success{ 
     print("cancelled") 
     return 
    } 

    if activity == UIActivityType.postToFacebook { 
     print("facebook") 
    } 

    if activity == UIActivityType.mail { 
     print("mail") 
    } 

} 

self.present(activityViewController, animated: true, completion: nil) 
संबंधित मुद्दे

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