2010-09-15 54 views
2

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

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

为了您的信息,我初始化rightBarButtonItem,并将其分配给navigationItem在viewDidLoad方法,并要求酥料饼提出自己之前。我试图在viewWillAppear和viewDidLoad中调用popover,但效果是一样的。

我最好的选择是使用presentPopoverFromRect:inView:permittedArrowDirections:动画:代替,而“猜测”这取决于设备的方向的位置。

更新:当我旋转的iPad中,酥料饼确实跳转到正确的位置。看来barButtonItem的位置只是在最后一分钟才确定,并且在我问我的popover出现之后。

+0

在viewDidAppear中如何?我有点期待在第一个viewWillAppear:call发生的时候,这些视图还没有实际布置。 – imaginaryboy 2010-09-15 20:12:15

+0

不,没有任何viewWillAppear或viewDidAppear方法的运气。这真是太古怪了。视图确实显示后,我点击右边的ButtonButtonItem,一切都很好。 – 2010-09-15 20:28:13

+0

同样的问题...任何发现? – rjobidon 2010-12-04 03:44:55

回答

1

在这样的情况下时机看起来是很重要的,我发现一个推迟动作,直到运行循环的下一次迭代帮助的把戏。如果针对iOS 4.0+开发,可以通过GDC轻松实现:

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