2010-09-15 51 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 
});