我正在尝试在我的应用上显示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.view
和self.view.frame
是有效对象(在调试时测试)。
谢谢,可以。
答案 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,你必须满足这两件事:
定义DocumentActionMenu的区域
CGRect rect = CGRectMake(0.0,0.0,0.0,0.0);
[interactionController presentOpenInMenuFromRect:rect inView:self.view animated:YES];
使用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上我按原样(在底部)
离开弹出窗口