我是否没有理解UIActivityViewController,还是实现目前很糟糕?

4

我正在尝试将我的应用程序转换为使用UIActivityViewController,而不是UIActionSheet,这样我就可以得到漂亮的图形共享按钮,而不是文本按钮。(我的应用程序仅针对iOS 6)

在试用了几个晚上后,似乎我要么完全误解了如何使用它,要么苹果当前的实现太糟糕了:

  • 您无法为不同的服务指定不同的消息。 如果我希望某些功能适用于Mail、Facebook、Messages和Twitter,则需要将字符数量限制在140个字符以内以适应Twitter。 是否有一种方法可以为每种类型的活动设置自定义内容?

  • 似乎没有办法为邮件消息设置主题或收件人。 我已经阅读了文档,它们让人感觉可以使用mailto:协议的NSURL来实现这一点,但在我的测试中,这些URL只会被挤入信息体中。 实际上是否有一种方法可以设置主题行和可选的收件人?

  • 如果我想要避免这些缺陷,并通过子类化UIActivity来做自己的自定义活动,那么我必须使用自定义图像/图标。 因此,我无法使用Apple官方图标模仿邮件活动,并实现我自己的自定义活动后端,该后端实际上可以让我设置主题行、收件人、自定义正文等。 我错了吗? 是否有一种方法可以使用Apple的服务图标,但又有机会自定义行为? (我只看到一个在活动完成后运行的回调,对吧?)

我希望我是错的!

2个回答

7
有没有办法为每种类型的活动设置自定义内容?
是的,我想你应该子类化 UIActivityItemProvider 并覆盖方法 –activityViewController:itemForActivityType:,根据你的逻辑进行处理(例如,对于 Twitter 截取字符串到 140 个字符)。然后将此类的一个实例传递给 -[UIActivityViewController initWithActivityItems:applicationActivities:]
是否真的有办法设置主题行和可选的收件人?
你是对的,mailto 方案应该能够设置这些字段。如果它不起作用,我认为这是一个 Bug。(我自己没有尝试过,但我会检查一下。)
有没有办法使用苹果的服务图标,但又有机会自定义行为?
我认为你不能这样做。(除非你想黑掉那些系统活动。)

确认所有这些。我正在使用UIActivityItemProvider的子类来实现这个目的,它工作得很好。确实有一个mailto:的bug; URL最终出现在正文中。糟糕。 - JLundell
很不幸,UIActivityItemProvider似乎无法自定义,因为这不仅仅是为Twitter修剪文本的问题,而是要形成一个完全不同的自定义推文。感谢反馈! - Mason G. Zhwiti
你可以在那里放任何你想要的东西。如果你想要在Twitter上使用"Loprem Ipsum",在Facebook上使用"Bible",你都可以做到。 - Tricertops
是的。mailto错误 - https://dev59.com/_Wcs5IYBdhLWcg3wu2Up?rq=1 - Joshua Dance
截取字符串只是一个例子 - 如果你子类化UIActivityItemProvider,你可以为推文返回任何文本。 - Bill

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接