我不了解UIActivityViewController,或者当前的实现很糟糕?

时间:2013-01-31 06:33:48

标签: ios uiactivityviewcontroller

我正在尝试移动我的应用程序以使用UIActivityViewController而不是UIActionSheet,这样我就可以获得花哨的图形共享按钮而不是文本按钮。 (我的应用仅针对iOS 6。)

在尝试使用它几个晚上之后,似乎我完全误解了如何使用它,或者Apple目前的实施方式很糟糕:

  • 您无法为不同的服务指定其他消息。如果我想要一些可以解决的问题:邮件,Facebook,消息和Twitter,它最多需要140个字符才能在Twitter上运行。有没有办法为每种类型的活动设置自定义内容?

  • 似乎无法为邮件设置主题行或收件人。我已经阅读了文档,他们认为这可能是使用mailto:protocol的NSURL可能实现的,但在我的测试中,这些URL只是被推到了邮件正文中。实际上是否有办法设置主题行和可选的收件人?

  • 如果我想解决这些缺点,并通过子类化UIActivity来完成我自己的自定义活动,我必须使用自定义图像/图标。因此,我无法使用Apple的官方图标模仿Mail活动,例如实现我自己的自定义活动后端实际上让我设置主题行,收件人,自定义正文等。我错了,有没有办法使用Apple的服务图标,但有机会自定义行为? (我看到的唯一一个回调就是在活动完成后运行,对吗?)

我希望我错了!

2 个答案:

答案 0 :(得分:7)

  
    

有没有办法为每种类型的活动设置自定义内容?

  

是的,我猜你应该将UIActivityItemProvider子类化并用你的逻辑覆盖方法–activityViewController:itemForActivityType:(例如,修剪字符串为Twitter的140个字符)。
然后将此类的实例传递给-[UIActivityViewController initWithActivityItems:applicationActivities:]


  
    

实际上是否有办法设置主题行和可选的收件人?

  

你是对的,mailto方案应该能够设置这些字段。如果它不起作用,我认为这是错误。 (我自己没试过,但我会给它一张支票。)


  
    

有没有办法使用Apple的服务图标,但是有机会自定义行为吗?

  

我认为你不能这样做。 (除非你想破解那些系统活动。)

答案 1 :(得分:1)

您最好使用行为类似于UIAcitvityController的自定义组件,因为它非常有限,正如您所指出的那样。

这是一个示例:https://github.com/hjnilsson/REActivityViewController,我只是从https://github.com/romaonthego/REActivityViewController分叉,以便您设置电子邮件主题字段。