2014-05-25 78 views
1

我在同一個ios應用程序中有兩個故事板。故事板導航 - 推送和從堆棧中移除

故事板1是login.storyboard。Storybaord 2是processing.storyboard。

login.storyboard具有以下場景:

1)歡迎

2)登錄

processing.storyboard具有

1)啓動

2)圖像

3)說明

4)完成

login.storyboard處理登錄,同時處理.storyboard創建並上傳對象。

我疊的理解如下:

從歡迎登錄瀏覽給出:

1:[welcome]-[login.storyboard] 

2:[login]-[login.storyboard] 

登錄後,我把使用

- (void) pushStory: (NSString *) story { 

UIStoryboard *settingsStoryboard = [UIStoryboard storyboardWithName:story bundle:nil]; 
UIViewController *initialSettingsVC = [settingsStoryboard instantiateInitialViewController]; 
initialSettingsVC.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[self presentViewController:initialSettingsVC animated:YES completion:nil]; 
} 

堆棧宜processing.storyboard現在成爲:

1:[welcome] 
2:[login] 
3:[start] 

之前,我決定單擊(每個頁面上可用),註銷我可能會說明在工作流程,我在這一點上堆將

1:[welcome]-[login.storyboard] 

2:[login]-[login.storyboard] 

3:[start]-[processing.storyboard] 

4:[images]-[processing.storyboard] 

5:[description]-[processing.storyboard] 

註銷應該帶我回到[歡迎]我的問題是與故事板一起如何將堆棧清除回[歡迎]並確保login.storyboard是最新的。

我的知識存在差距,因爲我在6年左右剛剛回到iPhone開發中,之前沒有看到這些。

我以爲只是推登錄。故事板壓入堆棧但這隻會使棧繼續,而不是增長清理出來

回答

1

使用展開segues。

添加這種方法在[歡迎]:

-(IBAction)reset:(UIStoryboardSegue *)segue 
{ 
    NSLog(@"Back to Welcome"); 
} 

在界面生成器,創建在[開始],[圖像]和[描述]然後鏈接各個按鈕的綠色的「退出」按鈕UIButtons各自的viewControllers並在出現的彈出式菜單中選擇reset:

(見WWDC 2012會話視頻「採用在App故事板」有關開卷塞格斯更多細節[在38分鐘開始。)

+0

十分感謝了很多 – sapatos

1

,你可以pop回到堆棧中的任意點,例如

[self.navigationController popToRootViewControllerAnimated:YES];   // all the way back to the first view controller 
    [self.navigationController popToViewController:self.navigationController.viewControllers[1] animated:YES]; // back to the second view controller 
    [self.navigationController popViewControllerAnimated:YES];    // back to the previous view controller 

這個回答假設的故事板1具有

  • 導航控制器
  • 歡迎視圖控制器
  • 登錄視圖控制器

和故事板2具有

  • 導航控制器
  • 開始視圖控制器
  • 圖像查看控制器
  • 描述視圖控制器
  • 光潔度視圖控制器

請注意,故事板2中的導航控制器從未實際實例化過,但需要這樣才能讓故事板2中的其他視圖控制器可以通過segues連接。當從login view controller導航到start view controller代碼應該類似於此

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"SecondStoryboard" bundle:nil]; 
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"ControllerC"]; 
[self.navigationController pushViewController:vc animated:YES]; 

請注意,這並不實例化initialViewController因爲這是導航控制器,而我們不希望另一個導航控制器。取而代之的是,在Identity inspector下給start視圖控制器一個Storyboard ID,然後直接實例化start視圖控制器。在實例化start視圖控制器後,將其推到現有的導航控制器上。如果您不希望用戶導航回login視圖控制器,則可能需要隱藏後退按鈕。