在UIActivityViewController集成中的Quirk

时间:2014-06-24 18:26:41

标签: ios uiactivityviewcontroller

我将共享选项集成到我的应用程序中,一切似乎都很好,基本上我排除了除Message,Twitter和Facebook之外的所有类型的UIActivity,当我测试它是否有效时,我在文本框中看到的是

  

"我获得了新的高分!

     

com.apple.UIKit.activity.Message

     

com.apple.UIKit.activity.PostToFacebook

     

com.apple.UiKit.activity.PostToTwitter"

,文本出现在每个活动中。

无论如何要删除文本,还是应该这样?

这是我的MainViewController中的一个方法,它提供了UIActivityViewController。

-(void)sharedView {

APActivityProvider *APActivityPro = [[APActivityProvider alloc] init];

NSArray *activites = @[APActivityPro,UIActivityTypeMessage, UIActivityTypePostToFacebook, UIActivityTypePostToTwitter];

activityController = [[UIActivityViewController alloc] initWithActivityItems:activites applicationActivities:nil];

activityController.excludedActivityTypes = @[UIActivityTypePostToWeibo,
                                            UIActivityTypeMail,
                                            UIActivityTypePrint,
                                            UIActivityTypeCopyToPasteboard,
                                            UIActivityTypeAssignToContact,
                                            UIActivityTypeSaveToCameraRoll,
                                            UIActivityTypeAddToReadingList,
                                            UIActivityTypePostToFlickr,
                                            UIActivityTypePostToVimeo,
                                            UIActivityTypePostToTencentWeibo,
                                            UIActivityTypeAirDrop];

[self presentViewController:activityController animated:YES completion:nil];

[activityController setCompletionHandler:^(NSString *activityType, BOOL completed)
 {

    if (completed)
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@""
                                                        message:NSLocalizedString(@"Post Sent!",@"the confirmation of the sent message/post")
                                                       delegate:nil
                                              cancelButtonTitle:NSLocalizedString(@"OK",@"done")
                                              otherButtonTitles:nil];
        [alert show];
    }
}
 ]; 
}

还有我的APActivityProvider.m文件中的代码。

-(id) activityViewController:(UIActivityViewController*)activityViewController

     itemForActivityType:(NSString *)activityType

{

if ([activityType isEqualToString:UIActivityTypeMessage])

    return NSLocalizedString(@"I got a new highscore!",@"Comment for message");

if ([activityType isEqualToString:UIActivityTypePostToFacebook])

    return NSLocalizedString(@"I got a new highscore!",@"Comment for Facebook");

if ([activityType isEqualToString:UIActivityTypePostToTwitter])

    return NSLocalizedString(@"I got a new highscore!",@"Comment for twitter");

return nil;
}

- (id) activityViewControllerPlaceholderItem:(UIActivityViewController *)

activityViewController

{
return @"";
}

1 个答案:

答案 0 :(得分:0)

您似乎错误地使用了API。具体做法是:

NSArray *activites = @[APActivityPro,UIActivityTypeMessage, UIActivityTypePostToFacebook, UIActivityTypePostToTwitter];

activityController = [[UIActivityViewController alloc] initWithActivityItems:activites applicationActivities:nil];

活动项目是您的内容(字符串,图像等),而applicationItems是您添加到默认系统项目的自定义活动选项(您编写的内容,例如在应用商店活动中打开)。您无需告诉UIActivityViewController您想要的系统活动。默认情况下全部启用。

有关如何使用此API的示例,我已包含以下内容:

NSNumber *AppStoreID = [NSNumber numberWithInt:550008982];

NSArray *activityItems =
@[ AppStoreID ];

NSArray *applicationActivities =
@[ [ATFAppStoreActivity alloc] ];

UIActivityViewController *activityViewController =
[[UIActivityViewController alloc] initWithActivityItems:activityItems
                                  applicationActivities:applicationActivities];

[self presentViewController:activityViewController animated:YES completion:nil];

在这里,我有我的子类UIActivity(ATFAppStoreActivity),它使NSNumber显示该应用程序的App Store页面。