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

我已经开始使用UIDocumentInteractionController为一个新的应用程序,但我想知道如何添加额外的行动,你在预览屏幕上的行动菜单?

看来,菜单只列出已注册给定的urltypes的应用程序,再加上我看到在iOS4.2上显示的PRINT。 我想添加通过电子邮件发送和保存到照片,但没有看到扩展此菜单的方式。 我可以编写我想要的动作,只是将它们添加到似乎不可能的菜单中?

我错过了什么明显的?

你是对的,这是方法

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

这些方法支持的动作select器是copy:print:。

要显示电子邮件和“保存到”选项,你应该使用

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

要么

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

如UIDocumentInteractionController.h中所述:

/这是您应该调用的默认方法,以便您的用户select快速查看,打开或复制文档。 /

在使用时

//提供一个菜单,允许用户在另一个应用程序中打开文档。

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

要么

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

电子邮件,短信和“保存在照片/video”不显示。

如果需要采取其他措施而无法识别,请考虑使用UIActionSheet。

我不能评论,所以我正在回答:-)

你应该试试QuickLook框架。 在我的情况下,我search了如何定制UIDocumentInteractionController,没有find有用的东西。 我实现了我想要的(在我的情况下,在另一个视图中有一个预览“视图”)使用QuickLook。 这里有一个示例代码,有一个QLPreviewController作为子控制器(能够自由地创build父控制器,这将在你的情况下做到这一点)。

 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)

我可以build议一个简单的UIActionSheet或更好的一个popover,如果你是在iPad上与应用程序的表视图中,你可以手动添加打印,电子邮件和其他一切。