2012-04-05 46 views
1

我有一個iOS 5選項卡式應用程序,使用故事板。iOS 5試圖pushViewController從模態視圖

我的選項卡控制器指向三個導航控制器。

從他們中的一個,流看起來是這樣的:

開始視圖 - >照片視圖(模式) - >目錄視圖

在照片屏幕,我有以下按鈕代碼:

- (IBAction)acceptPhotoButtonPressed:(id)sender { 
    UIViewController *catalogView = [self.storyboard instantiateViewControllerWithIdentifier:@"CatalogView"]; 
    [self.navigationController pushViewController:catalogView animated:YES]; 
} 

我試着打打鬧鬧與presentingViewControllerparentViewController - 甚至鍵入鑄造那些到UINavigationController。這導致其崩潰,並顯示以下錯誤消息:

2012-04-06 00:32:45.808 myapp[19345:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITabBarController pushViewController:animated:]: unrecognized selector sent to instance 0x18d0d0' 

這樣告訴我,我還沒有得到一個UINavigationController的保持,但UITabBarController

有沒有解決這個辦法嗎?

回答

4

「推」式SEGUE只能從正由一個UINavigationController管理的視圖控制器完成。如果你試圖這樣做,否則什麼都不會發生。

而不是像你在你的問題中描述的那樣模態地顯示你的照片視圖,你應該顯示一個UINavigationController的實例作爲模態視圖,並使照片視圖成爲導航視圖的根視圖控制器。 (這可以通過故事板來設置)。然後你的push segue會起作用。

如果您不希望在頂部導航欄來顯示你的第一個視圖控制器(圖片視圖)和 你可以使用:

[self.navigationController setNavigationBarHidden:YES animated:NO] 

這將隱藏頂部導航欄。一旦你把一個新的視圖控制器,如果你想要的導航欄,以重新出現在一個和任何後續視圖控制器,你必須setNavigationBarHidden設置爲NO在新的ViewController。

[self.navigationController setNavigationBarHidden:NO animated:NO] 
+0

您是否有首選資源可以通過故事板進行設置?當我設置一個新項目時,默認情況下起始視圖是UIView,而不是UINavigationView。如果有一種方法可以將UINavigationView設置爲初始視圖,那麼很高興看到! – Danny 2013-01-30 07:51:30

-1

Segue公司的轉變是從一個場景到另一個場景的首選方式。

您既可以創建從按鈕,或從VC本身Segue公司和SEGUE連接到你要推的情景。確保Segue公司屬性設置爲推,然後在按鈕的IBAction爲(假設你連接到VC)做到這一點:

- (IBAction)acceptPhotoButtonPressed:(id)sender { 
    [self [email protected]"mySegueID" sender:nil]; 
} 

然後在prepareForSegue方法:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier [email protected]"mySegueID"]) { 
     // Do whatever setup you need to do before firing the segue 
    } 
} 

如果連接繼續關注按鈕本身,然後完全消除performSegue方法(您甚至不需要IBAction)。

+0

我都嘗試,當我按下按鈕沒有任何反應。也許它不能從模態的角度來完成? – MartinHN 2012-04-05 22:52:30

+1

「推」風格segue只能從UINavigationController管理的視圖控制器完成。不是以模態方式顯示照片視圖,而是將UINavigation控制器的實例顯示爲模式視圖,並使照片視圖成爲導航視圖的根視圖控制器。然後你的push segue應該可以工作。 – jonkroll 2012-04-05 23:03:29

+0

@jonkroll這似乎工作!任何方式,我可以避免模式照片視圖上的頂部酒吧,同時仍然顯示我何時繼續目錄視圖? – MartinHN 2012-04-05 23:10:09