如何在iOS中将文本传递给第三方应用程序

如何在iOS中将文本传递给第三方应用程序,ios,objective-c,Ios,Objective C,我的应用程序生成某种文本信息 用户在我的应用程序中按下“共享”按钮,然后弹出一个窗口,其中包含已安装应用程序的列表,或者只显示可接收字符串参数的应用程序。之后,用户选择“邮件”应用程序,然后使用新的电子邮件和我的应用程序中的给定文本将其打开。或者用户选择Skype应用程序,然后用给定的文本打开它 这些场景如何在iOS中实现 PS:我已经在Android应用程序中看到了类似的行为(通过Intentextras) 更新:我在下面发布了我所需要的答案(通过UIActivityViewControlle

我的应用程序生成某种文本信息

用户在我的应用程序中按下“共享”按钮,然后弹出一个窗口,其中包含已安装应用程序的列表,或者只显示可接收字符串参数的应用程序。之后,用户选择“邮件”应用程序,然后使用新的电子邮件和我的应用程序中的给定文本将其打开。或者用户选择Skype应用程序,然后用给定的文本打开它

这些场景如何在iOS中实现

PS:我已经在Android应用程序中看到了类似的行为(通过
Intent
extras)


更新:我在下面发布了我所需要的答案(通过UIActivityViewController)。没有一个答案适用于所有目标应用程序。你需要研究每个应用程序,看看它是否有接收其他应用程序信息的功能

一个简单的方法是调用一个指向其他应用程序的URL

对于邮件,您可以调用一个
mailto://
URL,该URL使用所需字段(收件人、抄送、密件抄送、主题或正文)中的文本组成电子邮件

如果应用程序支持iOS文档模型,您可以向其传递要打开的文档

如果目标应用程序有一个服务器,那么您也可以连接到该服务器并以这种方式向其发送数据。同样,这不是一个你可以问的问题。对于每个目标应用程序,答案都会有所不同,对于某些应用程序,答案会是“你不能,因为它没有任何从外部应用程序接收数据的机制。”


安卓是一个不同的野兽,与iOS有着不同的能力。iOS更像是一个“有围墙的花园”,在你的应用程序之外的访问非常有限。

我发现对我来说最好的解决方案是

- (IBAction)onShare:(id)sender {
    NSString *textStr = self.textToShare.text;
    NSArray *items = @[textStr];

    UIActivityViewController *activity = [[UIActivityViewController alloc]
                                          initWithActivityItems:items
                                          applicationActivities:nil];

    [self presentViewController:activity animated:YES completion:nil];
}

这正是我需要的。它显示弹出视图,其中包含能够接收文本字符串的应用程序列表。然后用户可以选择其中任何一个,控制器向其发送文本。

如果在IOS中执行此操作,则没有通用方法查看
UIActivityViewController
。谢谢rmaddy。它对我有用;)使用
UIActivityViewController
将是最好的答案。但只有在接收应用程序具有内置支持的情况下才会起作用。回到我的陈述,每个你想发送数据的应用的答案是不同的。对。但是看看这个问题——按下“共享”按钮。窗口弹出应用程序列表。用户选择一个,例如“邮件”。这是对
UIActivityViewController
的准确描述。谢谢Duncan,但在我的特殊情况下,UIActivityViewController似乎工作得很好。不确定这是如何解决您问我们的问题的,这是如何在用户选择的应用程序之间传递文本的?当然,在应用之间传递文本取决于您正在传递的应用的开发者是否也设置了一个
URL方案
,该方案接受文本作为参数?另外,为什么不直接将
self.textToShare.text
传递到
initWithActivityItems
中,比如
initWithActivityItems:@[self.textToShare.text]
意味着你可以将代码减少两行,并且仍然可读。为什么你认为它不能解决我的问题?它似乎打开了一个视图,其中包含可以接收文本字符串的应用程序的适当列表。用户可以选择应用程序,然后将给定的文本传递给所选应用程序。或者你认为它的工作原理不同吗?我也同意,代码可以以你注意到的方式稍微减少。但是我不确定带extra[]的代码是否更可读。老实说,我认为你没有按照你想要的方式提问。因此,在这里添加更多细节可能是最好的选择,说明它如何解决您的问题