2013-10-29 196 views
1

我有一個基本的故事板設置,我加載我的NavViewController,然後指向初始視圖控制器。然後,我有幾個額外的視圖控制器,所有的菊花鏈都以線性方式串聯在一起。當我最初啓動我的應用程序運行在我NavControllerViewController.m將視圖控制器添加到導航器與故事板

(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSArray * controllerArray = [self viewControllers]; 
    NSLog(@"view controllers: %@", controllerArray); 
} 

日誌僅示出了非常第一根視圖控制器(直接地「連接」到導航控制器的一個)以下。所有視圖控制器從堆棧中丟失。我的印象是,如果一個視圖控制器在我的故事板上,它會自動添加到導航控制器?

如果這是不正確的,將一個很好的選擇是從調用VC實例化每個VC?例如,如果我想從VC1過渡到VC2,將我把下面的代碼在VC1:

UIViewController *vc2 = [self.storyboard instantiateViewControllerWithIdentifier:@"vc2"]; 
[self pushViewController:vc2 animated:YES]; 

或者可能:

[self performSegueWithIdentifier:@"vc2Segue" sender:self]; 

回答

1

他們都能夠通過塞格斯到達,但是他們沒有被實例化或者被推入棧中,直到你繼續向他們走去。

您可以使用自執行segue策略,或推視圖控制器,或者,如果它響應單擊按鈕,只需控制從該按鈕拖動到下一個視圖控制器和Xcode做所有的爲你工作的其餘部分。

0

正如AdamG所述,UIViewController s將不會被推到堆棧,直到你繼續向他們走去。

要設置一個segue,請選擇一個UIViewController並控制並拖動連接到目標UIViewController。在Attributes Inspector選項卡下設置Storyboard Segue標識符。

使用方法performSegueWithIdentifier:繼續使用UIViewControllerperformSegueWithIdentifier:被稱爲prepareForSegue:sender:之前將被調用。這是您可以通過下一個UIViewController需要的任何值的位置。要檢查正在調用哪個segue,請使用prepareForSegue:sender:中的segue.identifier屬性。之後,您可以訪問destinationViewController屬性。

如果您需要手動實例化UIViewController請使用instantiateViewControllerWithIdentifer:。該標識符可以在故事板中的Identity Inspector選項卡下設置。

1

如果我正確理解你的問題,你有一個故事板設置看起來類似於下面的屏幕截圖。當一個應用程序加載這個故事板時,它肯定只有一個視圖控制器在導航控制器堆棧中,這將是根視圖控制器。 main.storyboard

因爲other view controllers are still not pushed into the navigation controller stack

Viewcontroller-1,你可以看到一個按鈕some Action,我已經從按鈕到Viewcontroller-2。一旦你點擊該按鈕創建一個push segue,第二視圖控制器將被推到導航控制器堆棧。

如果您現在打印viewcontrollers計數,您應該將計數記爲2

在View Controller-2中重複相同的操作,現在您可以看到計數碰到3。因爲現在我們有三個視圖控制器被推入導航控制器堆棧。

按下back按鈕彈出視圖控制器,並可以看到視圖控制器計數下降,這是因爲視圖控制器現在正從導航控制器堆棧中刪除。

相關問題