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

时间:2011-03-05 15:56:16

标签: objective-c ios cocoa-touch menu uidocumentinteraction

我已经开始将UIDocumentInteractionController用于新的应用程序,但我想知道如何在预览屏幕上的操作菜单中添加其他操作?

似乎菜单只列出已注册给定网址类型的应用,而且我看到PRINT出现在iOS4.2上。我想通过电子邮件添加发送并保存到照片,但没有看到扩展此菜单的方法。我可以编写我想要的动作,它只是将它们添加到菜单中似乎不可能吗?

我错过了一些明显的东西吗?

4 个答案:

答案 0 :(得分:2)

你是对的, 这些是方法

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


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

这些方法支持的操作选择器是复制:打印:

答案 1 :(得分: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 :(得分:1)

我无法评论,所以我回答: - )

您应该尝试使用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)

答案 3 :(得分:0)

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