2012-11-21 12 views
6

के साथ UIActivityItemProvider का उपयोग करके मैं अंततः किसी ऐसे व्यक्ति को ढूंढता हूं जो मुझसे भी एक ही समस्या का सामना कर रहा था।सबक्लास और UIActivityViewController

UIActivityViewController customize text based on selected activity

मैं UIActivityViewController की गतिविधियों के साथ सामग्री साझा अनुकूलित करने के लिए चाहते हैं।

"initWithActivityItems में कॉल पाठ स्ट्रिंग्स गुजर के बजाय, UIActivityItemProvider वर्ग की अपनी खुद की उप-वर्ग में गुजरती हैं और जब आप itemForActivityType तरीका लागू यह प्रदान करेगा: अच्छा जवाब निम्नलिखित है सेवा को 'गतिविधि प्रकार' पैरामीटर के रूप में साझा करना।

फिर आप इस विधि से अनुकूलित सामग्री वापस कर सकते हैं। "

मैं चाल समझते हैं, लेकिन मैं जिस तरह से यह करने के लिए ...

मैं एक उपवर्ग के रूप में ऐसा किया नहीं मिल रहा है:

@interface SharingItems : UIActivityItemProvider 

@implementation SharingItems 

-(id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType 
{ 
    // Here depending on the activityType i want to share NSString or UIImage 
} 

@end 

लेकिन मैं करने के लिए क्या पता नहीं है अपने मूल ViewController में अब क्या:

-(void)actionSheet 
{  
    if ([[UIActivityViewController class] respondsToSelector:@selector(alloc)]) 
    { 
     __block NSString *imgName = [[NSString alloc] initWithFormat:@"%@", _sharingUrl]; 
     NSArray *activityItems = [NSArray arrayWithObjects:imgName, nil]; 

     UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; 
     [self presentViewController:activityController animated:YES completion:nil]; 

     __block NSString *chan  = [[NSString alloc] initWithFormat:@"%@", _channel]; 
     [activityController setCompletionHandler:^(NSString* activityType, BOOL completed) 
     { 
      if (completed) 
      { 
      } 
     }]; 
    } 
    else 
     [self displayActionSheet]; 
} 

उत्तर

15

यहाँ एक उदाहरण UIActivityItemProvider (परीक्षण नहीं किया है, लेकिन काम कर कोड से रूपांतरित) है:

- (आईडी) मद विधि कहा जाता है और उन गतिविधि आइटम प्रदाताओं जब में पारित किया गया है

StringProvider *stringProvider = [[StringProvider alloc] initWithPlaceholderString:@"Default string" facebookString:@"Hello, Facebook."]; 
UIActivityViewController *shareController = [[UIActivityViewController alloc] initWithActivityItems:@[stringProvider] applicationActivities:nil]; 

मूल रूप से आप UIActivityItemProviders कि जब सही डेटा प्रदान बनाएँ:

@implementation StringProvider 

- (id)initWithPlaceholderString:(NSString*)placeholder facebookString:(NSString*)facebookString 
{ 
    self = [super initWithPlaceholderItem:placeholder]; 
    if (self) { 
     _facebookString = facebookString; 
    } 
    return self; 
} 

- (id)item 
{ 
    if ([self.activityType isEqualToString:UIActivityTypePostToFacebook]) { 
     return _facebookString; 
    } else { 
     return self.placeholderItem; 
    } 
} 

@end 

फिर जब आप गतिविधि दृश्य नियंत्रक की स्थापना आप गतिविधि दृश्य नियंत्रक बनाते हैं। आपको प्लेसहोल्डर आइटम के साथ आरंभ करने की आवश्यकता है ताकि ओएस जानता है कि अंतिम आइटम कौन सा वर्ग होगा (संभवतः एनएसएसटींग, एनएसआरएल, यूआईएममेज)। उम्मीद है की वो मदद करदे!

+0

आप इस 'आइटम' विधि के माध्यम से एकाधिक छवियों/वीडियो कैसे वापस कर सकते हैं? – Suran

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