【问题标题】:Multiple UIActivityViewController placeholder items?多个 UIActivityViewController 占位符项目?
【发布时间】:2026-01-13 16:35:01
【问题描述】:

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

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

(我可以想象一个解决方案,我实例化一堆 UIActivityItemProvider 实例,每个实例都支持上面提到的不同数据类型。但这似乎比应该做的工作多得多......?)

【问题讨论】:

标签: ios cocoa-touch uiactivityviewcontroller


【解决方案1】:

如果您在 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 被多次调用。但是你到底想达到什么目的呢?
  • 我的 UIActivityItemSource 根据activityType(数据、图像、文本)返回不同类型的对象。但是没有传入-[UIActivityItemSource activityViewControllerPlaceholderItem:]的activityType参数,那我怎么表达我返回不同种类的数据呢?
  • 但是如果我在占位符中返回一个文本对象,那么我只会在 ActivityViewController 中获得与文本相关的操作。我想要文本操作(Twitter、电子邮件)图像操作(保存到相机胶卷)等等。这似乎需要我能够通过占位符返回一个字符串一个图像一个数据对象,打开activityType。但是没有 activityType 参数。我没有得到什么?谢谢。
  • 他们很可能会在未来更改此实现,但目前看来 - 这是唯一的方法。