2012-09-28 11 views
32

मैं एक ही जानकारी के लिए पाठ अनुकूलित करने के लिए चाहते हैं, लेकिन जब मैं फेसबुक पर यह साझा कर रहा हूँ मैं चहचहाना हैश टैग या @ उपयोगकर्ता नाम योजना का उपयोग नहीं करना चाहते हैं पर आधारित पाठ को अनुकूलित ...UIActivityViewController चयनित गतिविधि

कैसे क्या मैं साझा करने के लिए पाठ को विविधता प्रदान कर सकता हूं जिसके आधार पर साझाकरण सेवा का उपयोग किया जाएगा?

बेशक मैं UIActivityViewController उपयोग कर रहा हूँ:

UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[shareText, shareURL] applicationActivities:nil]; 

उत्तर

27

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

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

+0

आपको यह उत्तर :) – Ertai

+9

कुछ उदाहरण कोड इस जवाब बाहर –

+1

महान जवाब धन्यवाद मांस के लिए, बहुत अच्छा होगा के लिए बहुत बहुत धन्यवाद। नीचे एक त्वरित उदाहरण जोड़ा गया। – pkorosec

39

मैंने यह उत्तर लिया और इसके लिए एक साधारण वर्ग बनाया। डिफ़ॉल्ट संदेश ट्विटर के अलावा अन्य आउटलेट साझा करके देखा जाएगा, और हैशवर्ड सरणी के भीतर ट्विटर शब्दों के लिए हैश के साथ दिखाई देगा यदि वे डिफ़ॉल्ट संदेश में मौजूद हैं। मैंने सोचा कि मैं इसे किसी और के लिए साझा करूंगा जिसकी आवश्यकता है। धन्यवाद क्रिस्टोफर!

उपयोग:

TwitterHashActivityItemProvider *twit = [[TwitterHashActivityItemProvider alloc] initWithDefaultText:@"I really like stackoverflow and code" 
                          hashWords:@[@"stackoverflow", @"code"]]; 
NSArray *items = @[twit]; 
UIActivityViewController *act = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil]; 

हैडर:

@interface TwitterHashActivityItemProvider : UIActivityItemProvider 

- (id)initWithDefaultText:(NSString*)text hashWords:(NSArray*)hashItems; 

@property (nonatomic,strong) NSArray *hashItems; 

@end 

कार्यान्वयन:

#import "TwitterHashActivityItemProvider.h" 

@implementation TwitterHashActivityItemProvider 

- (id)initWithDefaultText:(NSString*)text hashWords:(NSArray*)hashItems; 
{ 
    self = [super initWithPlaceholderItem:text]; 
    if (self) 
    { 
     self.hashItems = hashItems; 
    } 
    return self; 
} 

- (id)item 
{ 
    if ([self.placeholderItem isKindOfClass:[NSString class]]) 
    { 
     NSString *outputString = [self.placeholderItem copy]; 

     // twitter gets some hash tags! 
     if (self.activityType == UIActivityTypePostToTwitter) 
     { 
      // go through each potential hash item and augment the main string 
      for (NSString *hashItem in self.hashItems) 
      { 
       NSString *hashed = [@"#" stringByAppendingString:hashItem]; 
       outputString = [outputString stringByReplacingOccurrencesOfString:hashItem withString:hashed]; 
      } 
     } 

     return outputString; 
    } 

    // else we didn't actually provide a string...oops...just return the placeholder 
    return self.placeholderItem; 
} 

@end 
+5

क्या 'self.activityType == UIActivityTypePostToTwitter' होना चाहिए [self.activityType isEqualToString: UIActivityTypePostToTwitter]' या क्या कोई सुरक्षित रूप से पॉइंटर्स का उपयोग कर सकता है? –

1

एक UIActivityItemProvider उपवर्ग की स्विफ्ट कार्यान्वयन उदाहरण। कॉपी विकल्प केवल पासवर्ड का उपयोग करेगा, अन्य गतिविधि प्रकार पूर्ण शेयर टेक्स्ट का उपयोग करेंगे। विभिन्न उपयोग मामलों के लिए अनुकूलित करना आसान होना चाहिए। क्रिस्टोफर को क्रेडिट & निकनाक उनके उत्तरों के लिए।

class PasswordShareItemsProvider: UIActivityItemProvider { 

    private let password: String 

    private var shareText: String { 
     return "This is my password: " + password 
    } 

    init(password: String) { 
     self.password = password 
     // the type of the placeholder item is used to 
     // display correct activity types by UIActivityControler 
     super.init(placeholderItem: password) 
    } 

    override var item: Any { 
     get { 
      guard let activityType = activityType else { 
       return shareText 
      } 

      // return desired item depending on activityType 

      switch activityType { 
      case .copyToPasteboard: return password 
      default: return shareText 
      } 
     } 
    } 
} 

उपयोग:

let itemProvider = PasswordShareItemsProvider(password: password) 
let activityViewController = UIActivityViewController(activityItems: [itemProvider], applicationActivities: nil) 
संबंधित मुद्दे