显示UIPopoverController时的奇怪行为

时间:2010-09-15 19:28:43

标签: cocoa-touch ipad uikit

在我的iPad应用中,我保存了弹出框的状态(可见/不可见)。因此,在应用程序启动期间,我初始化UIPopoverController并告诉它使用presentPopoverFromBarButtonItem显示自己:allowedArrowDirections:animated:。对于第一个参数(UIBarButtonItem),我使用self.navigationItem.rightBarButtonItem。但是,弹出框会一直显示在屏幕的左侧(而不是在目标按钮下方)。

启动应用后,行为符合预期。有任何建议如何解决这个问题?

为了您的信息,我初始化rightBarButtonItem并将其分配给viewDidLoad方法中的navigationItem,并在要求弹出窗口呈现之前。我试图在viewWillAppear和viewDidLoad中调用popover,但效果是一样的。

我最好的选择是使用presentPopoverFromRect:inView:allowedArrowDirections:animated:而不是“猜测”位置,具体取决于设备的方向。

更新:当我旋转iPad时,弹出窗口会跳转到正确的位置。似乎barButtonItem的位置仅在最后一分钟确定,并且在我要求我的popover出现之后。

1 个答案:

答案 0 :(得分:1)

在这些时间似乎很重要的情况下,我发现推迟动作直到下一次运行循环迭代的技巧有所帮助。如果开发适用于iOS 4.0+,可以通过GDC轻松实现:

// call from viewDidAppear:
dispatch_async(dispatch_get_main_queue(), ^{
    // call presentPopoverFromBarButtonItem:permittedArrowDirections:animated: here
});