UIDocumentInteractionController没有出现在iPad上但在iPhone上工作

时间:2013-08-06 22:15:40

标签: ios ipad ios6 uidocumentinteraction

我正在尝试在我的应用上显示UIDocumentInteractionController。一切都在iPhone上完美运行,但iPad上什么也没发生。这是我的代码:

    interactionController = [UIDocumentInteractionController interactionControllerWithURL:imageFile];
    interactionController.UTI = @"com.instagram.photo";
    interactionController.annotation = [NSDictionary dictionaryWithObject:[self commentForInstagram] forKey:@"InstagramCaption"];
    [interactionController presentOpenInMenuFromRect:self.view.frame inView:self.view animated:YES];

interactionController是对实例的强引用,imageFile存在。在iPhone上,它会显示“打开方式...”对话框并且Instagram存在。在iPad上,上述代码运行时绝对没有任何反应。是的,我确实安装了Instagram并在我的iPad上工作。

执行代码时没有任何事情发生的原因是什么? self.viewself.view.frame是有效对象(在调试时测试)。

谢谢,可以。

6 个答案:

答案 0 :(得分:7)

在iPad上,UIDocumentInteractionController显示为Pop Up 尝试这样的事情:

-(void)shareClick:(UIButton*)sender {
   /*some code*/
   CGRect rectForAppearing = [sender.superview convertRect:sender.frame toView:self.view];
   [interactionController presentOptionsMenuFromRect:rect inView:self.view animated:YES];
}

答案 1 :(得分:4)

对于iPad,你必须满足这两件事:

  1. 定义DocumentActionMenu的区域

    CGRect rect = CGRectMake(0.0,0.0,0.0,0.0);

    [interactionController presentOpenInMenuFromRect:rect inView:self.view animated:YES];

  2. 使用iPad ,而不是模拟器

答案 2 :(得分:2)

使用presentOptionsMenuFromRect:inView:animated:

例如,如果您希望从底部显示菜单,请尝试

[interactionController presentOptionsMenuFromRect:self.view.bounds inView:self.view animated:YES];

答案 3 :(得分:1)

我今天早些时候遇到了同样的问题。

首先,不要将视图的frame传递给presentOptionsMenuFromRect:inView:animated。给定的rect应该在视图的坐标中。视图的frame位于视图的超视图的坐标中。

在iPhone上,传递视图的bounds有效,但在iPad上,Xcode(7.2.1)会抱怨不满足的约束而不显示文档交互控制器的视图(DIC)。

我尝试传递bounds作为第一个将DIC锚定在视图左上角的参数,而不是CGRectZero。这有效,但看起来很糟糕。

为了将DIC定位在视图底边的中心,您可以指定位于视图底边中心的大小为CGSizeZero的矩形(使用视图的{{1计算位置)。这有效,看起来还不错。

答案 4 :(得分:0)

presentOptionsMenuFromRect:inView:-这是关于弹出框箭头指向的位置。

视图是箭头所指向的视图,而rect是箭头所指向的视图内的。

一旦您知道这很容易。

- (void)shareClick:(UIButton*)sender
{
   /*some code*/
   [interactionController presentOptionsMenuFromRect:sender.bounds inView:sender animated:YES];
}

所以现在箭头将指向按钮边界的边缘。

多数情况下这是您想要的,但是例如您可以插入此矩形以使箭头指向按钮内部。

答案 5 :(得分:-1)

我有同样的问题。我检查了正在传递的帧,并看到x和y设置为0.接下来我尝试更改这些值(通过保持宽度和高度传递)并弹出窗口。代码如下:

-(void)openDocument:(UIView*)senderView {

   CGRect rectForAppearing = [senderView convertRect:senderView.frame toView:senderView];

   if (isIPAD)
     rectForAppearing =  CGRectMake(100, 100, rectForAppearing.size.width, rectForAppearing.size.height);

   [interactionController presentOptionsMenuFromRect:rect inView:self.view animated:YES];

}

弹出窗口出现在右上角的Ipad上。你当然可以根据自己的需要扭转这些100,100个参数。在iPhone上我按原样(在底部)

离开弹出窗口