Ios 多个UIActivityViewController占位符项?

Ios 多个UIActivityViewController占位符项?,ios,cocoa-touch,uiactivityviewcontroller,Ios,Cocoa Touch,Uiactivityviewcontroller,UIActivityItemSources似乎只能返回一种占位符项?这似乎很奇怪,因为我有一个UIActivityItemSource,它可以根据给定的活动返回字符串、NSData对象或图像 真的没有办法返回一种以上的占位符吗?(nsarray似乎不起作用。) (我可以想象一个解决方案,其中我实例化了一组UIActivityItemProvider实例,每个实例都支持上述不同的数据类型。但这似乎比需要做的工作多得多…?)如果在itemForActivityType函数中添加跟踪,您将看到此函数将

UIActivityItemSources似乎只能返回一种占位符项?这似乎很奇怪,因为我有一个UIActivityItemSource,它可以根据给定的活动返回字符串、NSData对象或图像

真的没有办法返回一种以上的占位符吗?(nsarray似乎不起作用。)


(我可以想象一个解决方案,其中我实例化了一组UIActivityItemProvider实例,每个实例都支持上述不同的数据类型。但这似乎比需要做的工作多得多…?)

如果在
itemForActivityType
函数中添加跟踪,您将看到此函数将被多次调用。可供分享的每个活动一个

例如,如果我想为Twitter和邮件/短信共享提供不同的文本,我会有如下内容:

- (id) activityViewController: (UIActivityViewController*) activityViewController itemForActivityType: (NSString*) activityType {

    if (activityType == UIActivityTypePostToTwitter) {
        return @"Sharing by Twitter";
    }
    else
        return @"Other kind of sharing";

}
更新:

如果您想提供不同类型的数据来共享(比如文本和图像),那么您需要编写占位符函数,使其在多次调用时返回两种不同类型的对象

- (id) activityViewControllerPlaceholderItem: (UIActivityViewController*) activityViewController {
    static int step = 0;

    if (step == 0) {
        step = 1;
        return @"text";
    }
    else if (step == 1) {
        step = 2;
        return [UIImage imageNamed: @"image"];
    }
}

我不是说你提到的方法;我说的是-[UIActivityItemSource activityViewControllerPlaceholderItem:]。这个方法似乎只调用了一次,而我显然无法打开activityType。谢谢。实际上在我的测试中,
activityViewControllerPlaceholderItem
被多次调用。但是您到底想实现什么呢?My UIActivityItemSource根据activityType(数据、图像、文本)返回不同类型的对象。但是没有将activityType参数传递到-[UIActivityItemSource activityViewControllerPlaceholderItem:],因此如何表示我返回了不同类型的数据?但是如果我在占位符中返回文本对象,那么我只会在ActivityViewController中获得与文本相关的操作。我想要文字动作(推特、电子邮件)和图像动作(保存到相机滚动),等等。这似乎要求我能够通过占位符返回字符串、图像和数据对象,并打开activityType。但是没有activityType参数。我在这里没有得到什么?谢谢。他们可能会在将来更改此实现,但现在看来,这是唯一的方法。