1

在我的StoryBoard中,我在導航控制器中嵌入了我的根視圖控制器,並在啓動應用程序時顯示此視圖。然後用戶通過一系列視圖,這些視圖基本上是以模態方式呈現的視圖控制器。popToRootViewControllerAnimated的問題

我想實現一個功能回到根視圖控制器,所以我叫

-(IBAction)backToMenu{ 
    NSLog(@"Back to menu"); 
    [self.navigationController popToRootViewControllerAnimated:YES]; 
} 

但沒有任何反應。如果我做NSLog(@"%@", self.navigationController");它打印null,所以我想這是我的問題的來源。您不能在模態顯示的視圖控制器上調用popToRootViewControllerAnimated:

除非您傳遞對根視圖控制器的引用。但這是正確的方法嗎?如果是這樣,你如何傳遞對根視圖控制器的引用?正如我的所有視圖控制器是UIViewController定製子類的實例,我試圖做插入此所述類代碼:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    [[segue destinationViewController] navigationController] = [[segue sourceViewController] navigationController];  
} 

,但我得到一個錯誤,指出navigationController是不可轉讓。

有什麼想法?

回答

0

在用於dismissViewControllerAnimated:completion:的文檔,它說:

如果連續你本幾個視圖控制器,從而建立一個 堆呈現視圖控制器的,要求一個視圖此方法 控制器下在堆疊將其直接子視圖控制器和所有視圖控制器放在堆棧上的那個子視圖上。

這表明你應該保持對你的根視圖控制器的引用(或以其他方式通知它)並在其上調用此方法。 (如果使用的話,在已棄用的dismissModalViewControllerAnimated:上有類似的說明。)

0

實現方法-(IBAction)backToMenu的類是否繼承自UIViewController?當我實現popToRootViewControllerAnimated的類從其他類繼承時,我得到了一些錯誤。爲了保持原來的navigatorController參考我想:

  1. 申報類,其中backToMenu實現,指針的指針導航控制器,是這樣的:UINavigationController *navCon;喲應該把這個聲明爲一個屬性,然後synthesizeit

  2. 所以,當你實例的視圖控制器爲這個類,你可以這樣做:

TheClassViewController *theClassVC = [TheClassViewController alloc] initWithNib:@"TheClassViewController" bundle:nil];

theClassVC.navCon = self.navigationController; //在這裏你將引用傳遞

[self.navigationController pushViewController:theClassVC animated:YES];

0

剛剛解決它。

問題是,在StoryBoard中,初始視圖控制器是根視圖控制器而不是它嵌入的導航控制器

一旦設置導航控制器作爲初始視圖控制器(即拖動箭頭使得它指向它),popToRootViewControllerAnimated作品就像一個魅力。

相關問題