2013-04-14 14 views
9

我一直在嘗試使用新的UIActivityViewController來替換我所有的UIActionSheets共享,但是我遇到了問題。UIActivityViewController - 只附加一個URL的某些活動

我有5個活動,消息,電子郵件,複製,Twitter和Facebook。我已經想通了如何讓那些表現出不同的文字,通過這一個自定義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]; 

不過,我只想展示Facebook和Twitter分享表中的URL(sharedURL),而不是消息,電子郵件或副本。任何方式來完成這個?

回答

15

您可以選擇發送到每種活動的類型。我創建了一個自定義活動提供商,並調用它像這樣:

​​

定製的提供者是UIActivityItemProvider

的子類
@interface CustomActivityItemProvider : UIActivityItemProvider 

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

@end 

的我的自定義提供商類看起來像這樣的膽量:

- (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; 
} 
0

你應該可以做到這一點,實現你自己的UIActivityItemProvider,並返回nil爲任何你不想使用該數據的活動類型。

相關問題