2012-07-19 45 views
0

我有一個彈出窗口,有一個主視圖用於從幾個子視圖中選擇,我想在用戶點擊彈出窗口之外並關閉窗口時將彈窗重置到主視圖。當解散popover時,是否可以彈出到poppover中的特定視圖?

例如,主popover視圖有Options,Categories,WordList和Results。我想讓它在下次用戶調用彈出窗口時進入主視圖,而不是返回到上次關閉彈窗時的視圖。

如果我只有一個層次深,我可以用

- (void)viewWillDisappear:(BOOL)animated { 
    [[self navigationController] popToRootViewControllerAnimated:YES]; 
    [super viewWillDisappear:animated]; 
} 

但如果我是深層次,例如WordList:類別:單詞我不能在WordList或Category中彈出到根目錄,因爲當視圖消失時,我想要進入下一級。如果我使用上面列出的代碼,我不能降低一個級別。我彈出到根視圖。

我想要的是能夠告訴popover視圖在被解散時彈出到其根目錄。類似這樣的:

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { 
    [[self popover] popToRootViewControllerAnimated:YES]; 
    [self.popoverController dismissPopoverAnimated:YES]; 

} 

有什麼想法?

回答

0

當初始化彈出窗口時,我測試它是否已經存在。如果是這樣,我跳過初始化並直接進入popover。這就是爲什麼,當popover被解僱時,它保留在用戶留下的任何視圖中。

爲了使它在第一個視圖開始,我只需要將彈出窗口設置爲零。

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popOverController { 

    [self.popoverController dismissPopoverAnimated:YES]; 
    self.popoverController = nil; 

現在當用戶調用彈出窗口時,它會創建一組新的視圖,從主菜單開始。

+0

我認爲有一個原因需要將popover的狀態從一個「外觀」保存到下一個。如果沒有,這可能是更清潔的解決方案。 – 2012-07-23 13:39:13

0

我相信你想要的是UIPopoverController的contentViewController屬性,它將是你初始化彈出窗口的任何視圖控制器 - 很可能是導航控制器。這...

[self.popover.contentViewController popToRootViewControllerAnimated:YES];

...應該爲你做的伎倆。

+0

不幸的是,UIViewController沒有方法'popToRootViewController'。 – JScarry 2012-07-20 16:02:59

+0

然後我有點好奇你是如何初始化popover的。 '[self.popover.contentViewController.navigationController popToRootViewControllerAnimated:YES]'可能會改變。如果沒有,請發佈初始化彈出窗口的代碼,以便我能夠理解你是如何做到的。 – 2012-07-20 20:40:14

+0

無法讓博客發佈代碼,但相關的行是'[self.popoverController presentPopoverFromBarButtonItem:buttonPressed allowedArrowDirections:UIPopoverArrowDirectionAny animated:YES];' – JScarry 2012-07-23 04:33:11

相關問題