2012-08-16 69 views
0

我有一個通用的應用程序,在操作表中顯示按鈕。UIPopover旋轉時崩潰

UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:[dataObj.preferences objectForKey:@"appts_name"], @"Reserve", nil]; 
[actionSheet showInView:self.view]; 

在自動更改爲UIPopoverController的iPad上。這顯示和行爲很好,但如果我有上面的彈出窗口顯示和改變方向在iPad上,然後點擊其中一個按鈕,它崩潰在那個按鈕的方法,我想顯示另一個popover,說

-[UIPopoverController presentPopoverFromRect:inView:permittedArrowDirections:animated:]: Popovers cannot be presented from a view which does not have a window. 

如果我不旋轉iPad,只需點擊一個按鈕,它就可以執行相同的代碼。從

UINavigationController *navBar = [[UINavigationController alloc] initWithRootViewController:addItemView]; 
popOver = [[UIPopoverController alloc] initWithContentViewController:navBar]; 
if (viewPopover) { 
    if (self.view.window != nil) { 
     CLS_LOG(@"Rect: %@ - View: %@", NSStringFromCGRect(rectPopover), viewPopover); 
     [popOver presentPopoverFromRect:rectPopover inView:viewPopover permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
    } 
} else { 
    // We should NEVER get here but just incase. I don't want the app to crash. 
    CLS_LOG(@"No viewPopover or rectPopover - %@ - %@", viewPopover, NSStringFromCGRect(rectPopover)); 
} 

日誌中CLS_LOG

-[AppointmentViewController showAppointmentAdd] line 148 $ Rect: {{341.333, 592}, {1, 1}} - View: <UIScrollView: 0xc8c5d40; frame = (1044 0; 768 872); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0xc8c7780>; contentOffset: {-0, 188}> 

rectPopoverviewPopover是合法的。爲什麼popOver崩潰說它不在窗口中,但只有當我旋轉設備?

編輯: 我發現它是由於方向改變後,我正在重新加載視圖,以說明新的尺寸。這看起來優先於窗口。它也似乎隻影響UIActionSheet。

+0

什麼是rectPopover和viewPopover?你怎麼知道他們是合法的? – Abizern 2012-08-16 20:55:33

+0

@Abizern我從他們那裏添加了日誌。 – Bot 2012-08-16 20:56:16

+0

正如你所看到的 - rectPopover不是合法的 – Abizern 2012-08-16 20:57:14

回答

0

你試過嘗試重新顯示旋轉後的彈出?

你知道什麼時候發生了旋轉(willRotateToInterfaceOrientation:),然後你可以根據它的新的錨點重新顯示彈出窗口控制器。

+0

我正在關閉willRotate中的UIAction,並在didRotate中重新打開它,即使在刷新了需要調整大小的視圖後,它仍然崩潰。 – Bot 2012-08-16 23:09:13

+0

你讓我朝着正確的方向前進。事實證明,在我的reloadViews中,我正在從超級viewPopover中移除。 – Bot 2012-08-16 23:30:21

相關問題