2013-04-14 14 views
9

新しいUIActivityViewControllerを使用して私のUIActionSheetsをすべて共有しようとしましたが、問題が発生しました。UIActivityViewController - 特定のアクティビティのURLのみを添付します。

私は5つのアクティビティ、メッセージ、メール、コピー、Twitter、Facebookを持っています。しかし、私は唯一の表示したい

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]; 

私のビューコントローラで
- (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; 
} 

そして、この:私はすでに、これらはこのカスタムUIActivityProviderサブクラスでを通じて、異なるテキストを表示していする方法を考え出しました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を返すことができるはずです。

関連する問題