2013-04-14 10 views
9

मैं साझा करने के लिए अपने सभी यूआईएक्शन शीट्स को प्रतिस्थापित करने के लिए नए UIActivityViewController का उपयोग करने का प्रयास कर रहा हूं, हालांकि मैंने एक समस्या में भाग लिया है।UIActivityViewController - केवल कुछ गतिविधियों के लिए एक यूआरएल संलग्न करें

मेरे पास 5 गतिविधियां, संदेश, ईमेल, कॉपी, ट्विटर और फेसबुक हैं। मैं पहले से ही समझ गए होंगे कि कैसे उन एक कस्टम UIActivityProvider उपवर्ग में इस के माध्यम से, अलग अलग पाठ को दिखाने के लिए:

- (id) activityViewController:(UIActivityViewController *)activityViewController 
     itemForActivityType:(NSString *)activityType 
{ 
    if ([activityType isEqualToString:UIActivityTypePostToTwitter]) 
     return twitter; 
    if ([activityType isEqualToString:UIActivityTypePostToFacebook]) 
     return facebook; 
    if ([activityType isEqualToString:UIActivityTypeMessage]) 
     return urlScheme; 
    if ([activityType isEqualToString:UIActivityTypeMail]) 
     return urlScheme; 
    if ([activityType isEqualToString:UIActivityTypeCopyToPasteboard]) 
     return urlScheme; 
    return nil; 
} 

और यह मेरे विचार में नियंत्रक:

ActivityProvider *aProvider = [[ActivityProvider alloc] init]; 
    aProvider.facebook = facebook; 
    aProvider.twitter = twitter; 
    aProvider.urlScheme = URL; 

    NSArray *Items = @[aProvider, sharedURL]; 

    UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:Items applicationActivities:Nil]; 
    activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll, UIActivityTypePostToWeibo]; 


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

हालांकि, मैं केवल दिखाना चाहते हैं फेसबुक और ट्विटर शेयर यूआरएल में यूआरएल (sharedURL), संदेश, ईमेल या कॉपी नहीं। इसे पूरा करने का कोई तरीका?

उत्तर

15

आप चुन सकते हैं कि प्रत्येक प्रकार की गतिविधि को क्या भेजना है। मैं एक कस्टम गतिविधि प्रदाता बनाया है और इसे इस तरह कहते हैं:

- (id)initWithText:(NSString *)text urlText:(NSString *)url{ 

    if ((self = [super initWithPlaceholderItem:text])) {  
     self.text = text ?: @""; 
     self.url = url ?: @""; 
    } 
    return self; 
} 

- (id)item { 
    NSString *activityType = self.activityType; 
    if ([self.placeholderItem isKindOfClass:[NSString class]]) {    
     if ([self.activityType isEqualToString:UIActivityTypePostToFacebook] || 
      [self.activityType isEqualToString:UIActivityTypeMail]) { 

      return [NSString stringWithFormat:@"%@\n%@", self.text, self.url]; 

     } else if ([activityType isEqualToString:UIActivityTypePostToTwitter]) { 

      return [self findBestStringOfLength:kTwitterMessageLength hashTags:YES]; 

     } else if ([activityType isEqualToString:UIActivityTypeMessage]) { 

      return [self findBestStringOfLength:kSMSMessageLength hashTags:YES]; 

     } else { 
      return self.text; 
     } 
    } 

    return self.placeholderItem; 
} 
:

 NSMutableArray *activityItems = [NSMutableArray array]; 

    CustomActivityItemProvider *activityItemProvider = 
    [[CustomActivityItemProvider alloc] initWithText:text 
                urlText:urlString]; 

    [activityItems addObject:activityItemProvider]; 


    //you can have your own custom activities too: 
    NSArray *applicationActivities = @[[CustomActivity new], 
               [OtherCustomActivity new]]; 
    UIActivityViewController *vc = [[UIActivityViewController alloc]initWithActivityItems:activityItems 
                    applicationActivities:applicationActivities]; 

कस्टम प्रदाता UIActivityItemProvider

का एक उपवर्ग
@interface CustomActivityItemProvider : UIActivityItemProvider 

- (id)initWithText:(NSString *)text urlText:(NSString *)url; 

@end 

इस तरह अपने कस्टम प्रदाता वर्ग नज़र कुछ की हिम्मत है

0

आप इसे अपने स्वयं के UIActivityItemProvider को कार्यान्वित करने में सक्षम होना चाहिए, और किसी भी गतिविधि प्रकार के लिए शून्य लौटाना चाहिए जहां आप उस डेटा का उपयोग नहीं करना चाहते हैं।

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