出于测试目的,我编写了两个应用程序:
- 第一个使用播放 MP3 文件
UIDocumentInteractionController
- 第二个什么都不做,只是注册文件类型“ public.mp3 ”
如果我将应用程序部署到iPhone模拟器,我的 MP3 播放器应用程序会在顶部显示一个按钮“在 'MP3Test' 中打开”。但是,如果我部署到iPad模拟器,则没有按钮,也没有“打开方式”菜单。
这已经在 iOS5 上测试过了。
有人可以解释这是错误还是功能以及背后的原因是什么?
出于测试目的,我编写了两个应用程序:
UIDocumentInteractionController
如果我将应用程序部署到iPhone模拟器,我的 MP3 播放器应用程序会在顶部显示一个按钮“在 'MP3Test' 中打开”。但是,如果我部署到iPad模拟器,则没有按钮,也没有“打开方式”菜单。
这已经在 iOS5 上测试过了。
有人可以解释这是错误还是功能以及背后的原因是什么?
取决于你从哪里展示它。
如果您从屏幕中间或下方的某处呈现它,只需从您正在呈现的对象的框架中呈现。
如果那在导航栏上,试试这个:
NSString *fileToOpen = [[NSBundle mainBundle] pathForResource:@"License" ofType:@"pdf"];
UIDocumentInteractionController *controller = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:fileToOpen]];
controller.delegate = self;
CGRect navRect = self.navigationController.navigationBar.frame;
navRect.size = CGSizeMake(1500.0f, 40.0f);
[controller presentOptionsMenuFromRect:navRect inView:self.view animated:YES];
iPad 对弹出框有亲和力(请参阅UIPopover),为什么它会在其中显示UIActionSheet。面对您遇到的类似问题,我让我的 UIDocumentInteractionController 从 UIBarButtonItem 呈现自己(导致 UIPopover 演示),而不是从视图本身(在 iPhone 上工作得很好):
保存对操作按钮的引用(我的导航栏中有我的)。
使用操作按钮引用而不是 View 引用来使用 PresentOpenInMenu,从而生成 UIPopover 演示文稿。
请注意,此更改不会影响 iPhone 应用程序 - 它的行为与以前一样,即从屏幕底部打开 OpenInMenu 就像您使用 View 引用来呈现它一样。
在 iPad 上 UIDocumentInteractionController 看起来像 Pop Up 尝试这样的事情
-(void)shareClick:(UIButton*)sender {
/*some code*/
CGRect rectFor appearing = [sender.superview convertRect:sender.frame toView:self.view];
[interactionController presentOptionsMenuFromRect:rect inView:self.view animated:YES];
}