2012-10-04 15 views
12

मैं इन प्रोटोकॉल तरीकों,UIActivityItemSource प्रोटोकॉल

activityViewControllerPlaceholderItem: और activityViewController:itemForActivityType:

लेकिन वे कभी नहीं कहा जाता हो को लागू करने। मैं उन्हें कॉल करने के लिए UIActivityViewController कैसे कहूं?

मेरे पास UIActivityItemProvider सबक्लास भी है, हालांकि मैं इन 2 विधियों को कॉल करने के लिए उलझन में हूं। मैं वास्तव में कुछ नमूना कोड की सराहना करता हूं, क्योंकि मुझे वेब पर कुछ भी नहीं मिल रहा है। :)

उत्तर

14

दस्तावेज़ीकरण के अनुसार।
-initWithActivityItems:applicationActivities: पर जाने वाली गतिविधि वस्तुओं की सरणी स्ट्रिंग या छवियों जैसे डेटा ऑब्जेक्ट्स की एक सरणी हो सकती है, या यह UIActivityItemSource प्रोटोकॉल को लागू करने वाली ऑब्जेक्ट्स की सरणी हो सकती है।

यदि आप UIActivityItemSource प्रोटोकॉल को लागू करने वाली ऑब्जेक्ट्स की एक सरणी पास करते हैं तो UIActivityViewController का आपका उदाहरण आपकी गतिविधियों की वस्तुओं पर उन विधियों को कॉल करेगा। उन वस्तुओं को UIActivityItemProvider के उप-वर्ग होने की आवश्यकता नहीं है। UIActivityItemProvider सिर्फ एक वर्ग है जो इस प्रोटोकॉल के अनुरूप है।

+2

मैं पहले से ही ऐसा कर रहा हूं, और फिर भी विधियों को नहीं कहा जा रहा है। मैं एक 'UIActivityItemProvider' ऑब्जेक्ट में गुजर रहा हूं (और हाँ, मैंने अपने व्यू कंट्रोलर में 'UIActivityItemSource' प्रोटोकॉल को कार्यान्वित किया है)। – Mahouk

+2

आपको अपने व्यू कंट्रोलर में 'UIActivityItemSource' प्रोटोकॉल को लागू नहीं करना चाहिए। 'UIActivityItemProvider' इस प्रोटोकॉल के तरीकों को लागू करता है। – Niels

+0

यह अब काम करता है कि मैंने अपने 'UIActivityItemProvider' उपclass में विधियों को लागू किया! आपका बहुत बहुत धन्यवाद! मैं घंटों तक इस पर जा रहा हूं। – Mahouk

26

जहां भी आप चाहते हैं प्रोटोकॉल को कार्यान्वित कर सकते हैं, यहां तक ​​कि आपका व्यू कंट्रोलर ठीक है। initWithActivityItems:@[self] के साथ गतिविधि व्यू कंट्रोलर को तुरंत चालू करें।

+2

क्या आप वास्तव में बता सकते हैं कि हमें "initWithActivityItems:" –

+0

में "स्वयं" जोड़ने की आवश्यकता क्यों है यदि आप अपना व्यू कंट्रोलर अपना यूआईएक्टिविटी इटिमसोर्स सेट करते हैं तो आपको UIActivityViewController को बताना होगा। – Leon

17

JotWee द्वारा उत्तर मुझे मदद मिली।

उप वर्गीकरण की कोई आवश्यकता नहीं है, UIActivityItemSource प्रोटोकॉल विधियों को व्यू कंट्रोलर में लागू किया जा सकता है जहां शेयर बटन लागू किया जाता है।

बहुत महत्वपूर्ण गतिविधि आइटम सरणी में self जोड़ने के लिए, इस तरह (के रूप में JotWee सुझाव):

ViewController.h

@interface ViewController : UIViewController <UIActivityItemSource> 

ViewController:

NSArray *activityItems = [NSArray arrayWithObjects:self, url, image, nil]; 

यहाँ मेरा अंतिम कार्यान्वयन है .एम

- (void)shareBarButtonItemClick:(UIBarButtonItem *)sender 
{ 
    NSURL *url = [NSURL URLWithString:@"http://example.com"]; 
    NSURL *imageUrl = [NSURL URLWithString:@"http://example.com/images/1.jpg"]; 
    UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageUrl]]; 

    NSArray *activityItems = [NSArray arrayWithObjects:self, url, image, nil]; 

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

    [self presentViewController:activityViewController animated:YES completion:nil]; 
} 

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType 
{ 
    return @"Summary Text"; 
} 

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController 
{ 
    return @""; 
} 

- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType 
{ 
    return @"Subject"; 
} 
संबंधित मुद्दे