2013-05-22 5 views
6

में कौन सा आइकन क्लिक किया गया था, यह पता लगाने के लिए कि "सोशल" फ्रेमवर्क का उपयोग करते हुए, मोडल UIActivityViewController प्रस्तुत करते समय सभी सामान्य सोशल-मीडिया आइकन प्रदर्शित करते हैं, क्या यह पता लगाने का एक तरीका है कि उपयोगकर्ता ने किस आइकन पर क्लिक किया था? मतलब, अगर उन्होंने ट्विटर, फेसबुक, मेल, संदेश इत्यादि चुना है?UIActivityViewController

मैं संभवतः डॉक्स में इस कक्षा के लिए कुछ प्रतिनिधि तरीकों को देखने की उम्मीद कर रहा था लेकिन मुझे कुछ भी दिखाई नहीं दे रहा है।

किसी को भी कोई विचार मिला है?

उत्तर

17

UIActivityViewControllercompletionHandler संपत्ति है। अधिसूचित होने के लिए इस हैंडलर को लागू करें।

UIActivityViewController *avc = ...; 
avc.completionHandler = ^(NSString *activityType, BOOL completed) { 
    if (completed) { 
     NSLog(@"The selected activity was %@", activityType); 
    } 
}; 
+1

हाँ लेकिन पोस्ट पूरा होने के बाद यह ट्रिगर हो जाता है - जो मेरे उद्देश्यों के लिए बहुत देर हो चुकी है। मैं जो कर रहा हूं वह ट्वीट (या फेसबुक पोस्ट, ईमेल संदेश इत्यादि) को पूर्व-पॉप्युलेट कर रहा है कि उपयोगकर्ता कुछ पाठ भेज रहा है। सिवाय इसके कि टेक्स्ट का टुकड़ा ट्वीट्स, ईमेल इत्यादि के लिए अलग होगा। इसलिए मैंने सोचा कि जैसे ही उपयोगकर्ता आइकन पर क्लिक करता है, मैं प्रोग्राम को प्रोग्रामेटिक रूप से बदल सकता हूं। ऐसा करने के बारे में कोई विचार क्या है? – sirab333

+0

आपको अपनी मूल प्रश्न में अपनी इच्छा स्पष्ट करनी चाहिए थी। आपको बहुत बेहतर परिणाम मिलेंगे। Http://stackoverflow.com/questions/13551042/different-data-for-sharing-providers-in-uiactivityviewcontroller – rmaddy

+0

लिंक के लिए धन्यवाद - मैं इसे देख लूंगा! – sirab333

2

नीचे टुकड़ा मेरे मामले में काम किया:

[activityController setCompletionHandler:^(NSString *act, BOOL done) 
{ 

    NSLog(@"act type %@",act); 
    NSString *ServiceMsg = nil; 
    if ([act isEqualToString:UIActivityTypeMail]) 
    ServiceMsg = @"Mail sent"; 

    if ([act isEqualToString:UIActivityTypePostToTwitter]) 
    ServiceMsg = @"Post on twitter, ok!"; 

    if ([act isEqualToString:UIActivityTypePostToFacebook]) 
    ServiceMsg = @"Post on facebook, ok!"; 

    if (done) 
    { 
     UIAlertView *Alert = [[UIAlertView alloc] initWithTitle:ServiceMsg message:@"" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil]; 
     [Alert show]; 
     [Alert release]; 
    } 
    else 
    { 
     // didn't succeed. 
    } 
}]; 
+0

यह विधि पूर्ण विधि है। लेकिन जब मैं क्लिक ईवेंट प्राप्त करने के लिए wnat की तुलना में एफबी या व्हाट्सएप जैसे आइकन पर क्लिक करता हूं तो मैं प्राप्त करना चाहता हूं। तो मैं यह कैसे कर सकता हूँ? –

3

completionHandler मान्य नहीं है। completionWithItemsHandler का उपयोग करें।

activityController.completionWithItemsHandler = ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) { 
    NSLog(@"completionWithItemsHandler, activityType: %@, completed: %d, returnedItems: %@, activityError: %@", activityType, completed, returnedItems, activityError); 
}; 
2

इस आधार पर तो जवाब: https://stackoverflow.com/a/34581940/2177085

यह भी जांच करने के लिए उपयोगकर्ता WhatsApp या Gmail के माध्यम से साझा किया जाता शामिल हैं। आप अन्य प्रकार जोड़ने के लिए गतिविधि टाइप टाइप कर सकते हैं।

let activityViewController = UIActivityViewController(activityItems: [finalMsg as NSString], applicationActivities: nil) 
self.presentViewController(activityViewController, animated: true, completion: nil) 

activityViewController.completionWithItemsHandler = {(activityType, completed:Bool, returnedItems:[AnyObject]?, error: NSError?) in 

// Return if cancelled 
if (!completed) { 
    print("user clicked cancel") 
    return 
} 

if activityType == UIActivityTypeMail { 
    print("share throgh mail") 
} 
else if activityType == UIActivityTypeMessage { 
    print("share trhought Message IOS") 
} 
else if activityType == UIActivityTypePostToTwitter { 
    print("posted to twitter") 
} 
else if activityType == UIActivityTypePostToFacebook { 
    print("posted to facebook") 
} 
else if activityType == UIActivityTypeCopyToPasteboard { 
    print("copied to clipboard") 
} 
else if activityType! == "net.whatsapp.WhatsApp.ShareExtension" { 
    print("activity type is whatsapp") 
} 
else if activityType! == "com.google.Gmail.ShareExtension" { 
    print("activity type is Gmail") 
} 
else { 
    // You can add this activity type after getting the value from console for other apps. 
    print("activity type is: \(activityType)") 
} 
} 
2

स्विफ्ट 3

typealias स्विफ्ट 3 में UIActivityViewControllerCompletionWithItemsHandler

public typealias UIActivityViewControllerCompletionWithItemsHandler = (UIActivityType?, Bool, [Any]?, Error?) -> Swift.Void

करने के लिए बदल आप completionWithItemsHandler इस तरह उपयोग कर सकते हैं।

activityViewController.completionWithItemsHandler = {(activityType: UIActivityType?, completed: Bool, returnedItems:[Any]?, error: Error?) in 
    //Do whatever you want 
} 
संबंधित मुद्दे