【发布时间】:2014-04-26 02:49:50
【问题描述】:
我想为用户提供点击“操作”按钮并弹出常用共享表的功能,其中应包括消息、Facebook 等图标右侧的其他应用程序 - 可以处理 .txt 文件的应用程序,或者只是一个NSString。
我目前正在通过UIActivityViewController 显示一个共享表,它运行良好,但它不包括列表中的其他应用程序。通过阅读其他 SO 问题,我得出结论,如果您改用 UIDocumentInteractionController,则只有可能出现其他应用程序。我考虑在临时目录中创建一个 .txt 文件来共享该文件(而不仅仅是共享 NSString),但是当我点击“共享”按钮时只显示邮件(无副本)。 [请注意,如果我在真实设备而不是模拟器上运行它,则会出现除 Mail 以外的更多应用程序,并且还会出现 AirDrop。] 当我点击 Mail 时,应用程序崩溃:无法获取 URL 数据:操作无法完成. (Cocoa 错误 260。)我创建/检索 .txt 文件的方式有问题。
我的问题是:
- 为什么我的代码在尝试共享 .txt 文件时会导致崩溃?
- 如何让复制选项显示在与包含其他应用程序的共享表相同的共享表中?
总结一下:我需要一个共享表,其中包括:复制、AirDrop、消息、邮件、Facebook、Twitter、Pages、Dropbox 等,以获取简单的文本字符串。谢谢!
以下代码行位于我的 IBAction 共享按钮点击功能中:
UIActivityViewController 方法:
UIActivityViewController *activityView = [[UIActivityViewController alloc] initWithActivityItems:@[self.myUITextField.text] applicationActivities:nil];
[self presentViewController:activityView animated:YES completion:nil];
结果:
UIDocumentInteractionController 方法:
NSString *fileName = [NSString stringWithFormat:@"%@mytextfile.txt", NSTemporaryDirectory()];
[self.myUITextField.text writeToFile:fileName
atomically:NO
encoding:NSStringEncodingConversionAllowLossy
error:nil];
NSURL *textFileURL = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:@"mytextfile.txt"]];
UIDocumentInteractionController *documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:textFileURL];
[documentInteractionController presentOptionsMenuFromBarButtonItem:sender animated:YES];
结果(如果我在真实设备上运行,将显示更多应用和 AirDrop):
我想要获得的示例 - 减去底部的 3 个额外选项:
如果由于某种原因我无法获得带有字符串(而不是照片)的上述屏幕截图,我愿意按照 Dropbox 的方式实现它。他们在底部添加了一个“打开方式”按钮,该按钮显示了一个仅显示其他应用程序的不同工作表。请注意,我仍然需要原始工作表上的“复制”选项。
【问题讨论】:
-
到底出现了什么?屏幕截图可能会有所帮助。
-
仅邮件。我意识到模拟器没有其他应用程序,但它仍然应该像使用活动视图控制器一样具有 Copy。
-
那么,您是否检查过是否出现了其他已安装的应用程序?还是您的问题是关于让 Copy 出现?
-
我还没有。它在点击邮件时崩溃 - 我的 URL 有问题,它找不到文件,并且没有我需要的副本。
-
%@后面是否缺少斜杠?
标签: ios objective-c uibarbuttonitem uiactivityviewcontroller uidocumentinteraction