UIDocumentInteractionController向菜单添加自定义操作(例如电子邮件,保存到照片)

25
我开始在新应用程序中使用UIDocumentInteractionController,但我想知道如何将其他操作添加到预览屏幕上获得的操作菜单中?
似乎该菜单仅列出已注册给定URL类型的应用程序,而且我看到iOS4.2上显示了“打印”。我想添加通过电子邮件发送和保存到照片的选项,但不知道如何扩展此菜单。我可以编写想要的操作,但是将它们添加到菜单中似乎是不可能的?
我是否漏掉了显而易见的东西?

1
为什么不考虑一种不同的方法,UIActionSheet 包含:发送电子邮件..打开方式..使用手机相册打开..,为什么你坚持要将所有这些包含在 UIDocumentInteractionController 的菜单中呢? - Ahmad Kayyali
@AhmadTK,他也可以在iPad上工作吗? - makdad
@phooze:第一,他没有提到;第二,我采用了建议的方法,在iPad上也很好用。 - Ahmad Kayyali
澄清一下,是的,这是通用应用程序的iPad版本存在的问题。问题出在用户流程上,查看文档后进行相关操作是很自然的。可惜似乎无法扩展动作菜单,该菜单提供打印和打开方式选项,因为这是添加其他功能(如电子邮件)的逻辑位置。 - Roger
@AhmadKayyali 以 open with words 为例,如果我们使用 UISheetAction 而不是 UIDocumentInteractionController,你会如何自己实现呢? - Bagusflyer
4个回答

2
为了显示电子邮件和“保存到”选项,您应该使用:
- (BOOL)presentOptionsMenuFromRect:(CGRect)rect inView:(UIView *)view animated:(BOOL)animated;

或者
- (BOOL)presentOptionsMenuFromBarButtonItem:(UIBarButtonItem *)item animated:(BOOL)animated;

如 UIDocumentInteractionController.h 中所述:

/ 这是您应该调用的默认方法,以为用户提供快速查看、打开或复制文档的选项。 /

在使用时:

// 显示菜单,允许用户在其他应用程序中打开文档。

- (BOOL)presentOpenInMenuFromBarButtonItem:(UIBarButtonItem *)item animated:(BOOL)animated;

或者

- (BOOL)presentOpenInMenuFromRect:(CGRect)rect inView:(UIView *)view animated:(BOOL)animated;

邮件、短信和“保存到照片/视频”不会显示。

如果需要其他未被识别的操作,请考虑使用UIActionSheet。


2

我现在还不能评论,所以我来回答 :-)

你应该尝试使用QuickLook框架。在我的情况下,我搜索了很多关于如何自定义UIDocumentInteractionController的内容,但没有找到有用的信息。我通过使用QuickLook实现了我想要的效果(在另一个视图中有一个预览“视图”)。以下是一个示例代码,将QLPreviewController作为子控制器(能够自由创建父控制器,在您的情况下会起作用)。

self.previewController = [[QLPreviewController alloc]init];
self.previewController.delegate=self;
self.previewController.dataSource=self;
[self addChildViewController:self.previewController];
self.previewController.view.frame = CGRectMake(0, 0, self.previewView.frame.size.width, self.previewView.frame.size.height);
[self.previewView addSubview:self.previewController.view];
[self.previewController didMoveToParentViewController:self];

您还需要一些代理:QLPreviewControllerDataSource和QLPreviewControllerDelegate

还需要实现一些内容:

- (id <QLPreviewItem>)previewController: (QLPreviewController *)controller previewItemAtIndex:(NSInteger)index

返回指向资源的NSURL

- (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller

返回要预览的项目数量(在我的情况下,为1)


2
你是正确的, 以下是这些方法。
- (BOOL) documentInteractionController: (UIDocumentInteractionController *) controller performAction: (SEL) action


- (BOOL) documentInteractionController: (UIDocumentInteractionController *) controller canPerformAction: (SEL) action

这些方法支持的操作选择器有copy:print:

6
这些功能已自iOS 6.0起被弃用。 - SeanK

0
我可以建议使用简单的UIActionSheet,或者更好的是在iPad上使用弹出窗口,里面包含一个应用程序表格视图,您可以手动添加打印、电子邮件和其他所有内容。

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