19

我正在使用 iOS 6 新的方式来分享信息:UIActivityViewController。要根据媒体(facebook、twitter 或邮件)选择共享数据,我的视图控制器实现UIActivityItemSource协议如下:

- (IBAction)onShareButton:(UIButton *)sender
{

    UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[self] applicationActivities:nil];

    activityViewController.excludedActivityTypes = @[UIActivityTypeMessage, UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard, UIActivityTypeMessage, UIActivityTypePostToWeibo, UIActivityTypePrint, UIActivityTypeSaveToCameraRoll];
    [self presentViewController:activityViewController animated:YES completion:^{}];
}

#pragma mark - UIActivityItemSource Protocol

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
    if ([activityType isEqualToString:UIActivityTypePostToFacebook]) {
        NSArray *items = @[@"message facebook", [NSURL URLWithString:@"http://www.myUrlFacebook.com"]];
        return items;
    } else if ([activityType isEqualToString:UIActivityTypePostToTwitter]) {
        NSArray *items = @[@"message twitter", [NSURL     URLWithString:@"http://www.myUrlTwitter.com"]];
        return items;
    } else if ([activityType isEqualToString:UIActivityTypeMail]) {
        NSArray *items = @[@"message mail", [NSURL URLWithString:@"http://www.myUrlMail.com"]];
        return items;
    }

        NSArray *items = @[@"Not a proper Activity", [NSURL URLWithString:@"http://www.myUrlMail.com"]];
    return items;
}

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
    return @"PlaceHolder";
}

当我返回一个简单的 NSString 时,我activityViewController:itemForActivityType:的字符串很好用UIActivityViewController,但我找不到使用Array!

根据 Apple 文档,它应该是可能的:

此方法返回要由活动对象操作的实际数据对象 Apple 文档

有没有人用这个UIActivityItemSource协议和数组一起使用,或者有没有使用完整的教程来做到这一点?

注意:我在控制台上也遇到了这个错误,它可能会有所帮助......

启动服务:注册未知应用标识符 com.apple.mobilemail 失败

启动服务:找不到应用标识符 com.apple.mobilemail

4

2 回答 2

23

符合 的单个对象UIactivityItemSource只能返回单条数据 for activityViewControllerPlaceholderItem:,没有NSArrays。

您可以通过在 initial 的部分创建和传递两个UIActivityItemSources来克服这个问题。每个源都可以传递一个占位符值,但可以返回一些空白,因此您实际上不必根据活动使用该特定类型的数据。activityItemsinitWithActivityItems:itemForActivityType

或者只是使用另一个答案中提到的那个很酷的扩展。

于 2012-12-10T04:25:06.543 回答
16

在花费大量时间试图弄清楚这一点之后,似乎不可能将其传递给一个NSArray项目。所以我扩展UIActivityViewController使其成为可能。

RDActivityViewController

于 2012-11-07T18:30:43.007 回答