UIActivityItemSource Protocole设置复杂对象

时间:2012-10-23 11:21:53

标签: objective-c ios6 uiactivityviewcontroller

我正在使用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";
}

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

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

  

此方法返回活动对象要执行的实际数据对象   Apple documentation

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

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

  

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

     

启动服务:无法找到应用程序标识符com.apple.mobilemail

2 个答案:

答案 0 :(得分:21)

符合UIactivityItemSource的单个对象只能返回activityViewControllerPlaceholderItem:NSArray的单个数据。

您可以通过在初始UIActivityItemSource的{​​{1}}部分中创建并传递两个activityItems来解决此问题。每个源都可以传递一个占位符值,但可以在initWithActivityItems:上返回一些空白,这样您实际上就不必根据活动使用该特定类型的数据。

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

答案 1 :(得分:16)

在花费大量时间试图弄清楚这个之后,似乎无法传递NSArray个项目。所以我延长了UIActivityViewController以使其成为可能。

RDActivityViewController