2011-03-11 61 views
0

我正在开发一款应用程序,该应用程序应该是通用的,同时适用于iPad和iPhone。我想尽可能保持它们的接口类似。在iPhone应用程序中,我使用了Tab栏控制器,其中一个选项卡会转到图像选取器控制器。很明显,我无法在iPad中做到这一点。所以我已经劫持了那个按钮的控制来带一个带有图像选择器的popup控制器。这一切运作良好,除非我弹出弹出窗口时,它不在正确的位置。当我旋转模拟器时,弹出窗口会转到正确的位置,并在我回转时保持不动。UIPopoverController placement

我的代码是基于这个问题的代码: Ipad UIImagePickerController and UIPopoverController error

为什么我的弹出不会在正确的位置?

+0

是否酥料饼最初出现在正确的位置,如果你持有它在一个特定的(横向/纵向),或者是常断电?另外,你是否将任何转换应用到弹出窗口显示的视图? – Sam 2011-03-11 21:17:22

回答

3

如果你的代码是基于你提到的问题,它会出现在你使用的是下面的代码显示酥料饼:

[popoverController presentPopoverFromBarButtonItem:sender 
          permittedArrowDirections:UIPopoverArrowDirectionUp 
              animated:YES] 

UIPopoverController:presentPopoverFromBarButtonItem:permittedArrowDirections:动画接受的UIBarButtonItem *发件人你的UITabBar没有。 UITabBar使用具有UIBarItem基础的UITabBarItem。 UIBarButtonItem也有该基础(UIBarItem)。

好歹......我还需要表明从tabbaritem一个uipopovercontroller,我用下面的代码:

MyViewController *myVC = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:[NSBundle mainBundle]]; 
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:myVC]; 
[myVC release]; 
popover.popoverContentSize = myVC.view.frame.size; 
popover.delegate = self; 
int tabBarItemWidth = self.tabBar.frame.size.width/[self.tabBar.items count]; 
int x = tabBarItemWidth * 6; 
CGRect rect = CGRectMake(x, 0, tabBarItemWidth, self.tabBar.frame.size.height); 
[popover presentPopoverFromRect:rect 
         inView:self.tabBar 
     permittedArrowDirections:UIPopoverArrowDirectionUp 
         animated:YES]; 

注意:你的X计算将是不同的。为我选择的标签栏项目是第6个。 基本上

x = tabBarItemWidth * currentTabBarItemIndex; 
+0

忘了提到这个链接[我怎么能有一个popover来自一个标签,而不是一个视图](http://stackoverflow.com/questions/4405350/how-可以-I-具有-A-酥料饼-来从一个标签-代替对的一视图)。它与我给你的答案/代码相似,但我更喜欢我的解决方案,因为我的弹出窗口直接出现在选定的tabbaritem下。 – Sam 2011-03-11 22:51:49

+0

这是否解决了您的问题?我很确定调用UIPopoverController presentPopoverFromBarButtonItem不支持UITabBarItems。当你编译时,它会产生一个警告吗? – Sam 2011-03-14 22:02:01

+0

我没有收到任何警告,因为我实际上发送了一个ID,我连接到了IB中的选项卡按钮 – 2011-03-17 17:40:02