0

我的應用程序中有一個導航控制器和幾個視圖的故事板。這會自動將具有後退按鈕的導航欄放入任何不是根視圖的視圖中。如何使用給定的根視圖控制器和初始viewcontroller實例化故事板?

但是,有時我會從這個故事板導航到一個單獨的筆尖。我想回到故事板,但不一定是原始的根視圖。我目前使用這種方法來做到這一點:

+(void) TransitionOnStoryboard:(NSString*)storyboard to:(NSString*)identifier withViewController:(UIViewController*)viewController 
{ 
    UIStoryboard *sb = [UIStoryboard storyboardWithName:storyboard bundle:nil]; 
    UIViewController *vc = [sb instantiateViewControllerWithIdentifier:identifier]; 
    vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
    [viewController presentViewController:vc animated:YES completion:NULL]; 
} 

這顯示了我想要的視圖,但沒有導航欄。如何指定我的導航控制器或根視圖,以便應用知道將導航欄放入後退按鈕中?

感謝

+0

嗨,爲了導航到另一個nib文件,你要麼模態地展示nib控制器,要麼將它推到同一個導航控制器上。在這種情況下,如果你只是彈出(如果是推)或關閉筆尖控制器(在模態的情況下),你將返回到所呈現的控制器。如果這不是你所需要的,那麼請給出更多的規範 –

+0

你爲什麼不把你的實例化的VC推到導航棧中,而不是顯示它的模態!你應該使用'[viewController.navigationController pushViewController:vc動畫:是]'而不是 –

+0

我不認爲這有渴望的效果 –

回答

0

答案就是離開你的導航控制器,你從筆尖添加視圖控制器的下方。

將筆尖呈現爲全屏模式。根據需要,如果您的導航欄被刪除。從新的視圖控制器,你可以推更多的模式,添加一個導航控制器,或其他任何。

請注意,您可以完成所有這些工作並保留在故事板中。

完成後,關閉模式以顯示導航控制器,然後重新開始使用故事板。您可以將新視圖控制器無需動畫地拖到導航控制器上,當您彈出來自筆尖的模態時,它應該顯示爲最前面的VC。

+0

嗨,感謝您的幫助。所以,我不想擺脫我的導航欄;當我重新發布故事板時,我不想失去它。如何啓動/關閉新的視圖控制器,使其功能如您所說? –

+0

或者將其作爲模式呈現,然後在完成時將其解除,或者將其推入導航堆棧(如果需要,隱藏導航欄),然後在完成後將其從堆疊中彈出。無論哪種情況,導航堆棧都保留在來自筆尖的新VC之下。 –

0

我相信這不是解決這個問題的理想方法,但它確實對我很好。

本質上,我從視圖控制器中移除了所有視圖,這些視圖自導航離開故事板以來已經生成,但在當前視圖之前並彈出當前視圖。在這種情況下,這些觀點是一個類(CheckboxListViewController)的,因此可以很簡單,如下去除:(注意 - 快速瀏覽是包含這些方法的類的名稱)

+(void) navigateToMainMenu:(UINavigationController*)navigationController 
{ 
    [QuickView removeFromNavigationController:navigationController allOfViewControllerWithClass:[CheckboxListViewController class]]; 
    [navigationController popViewControllerAnimated:YES]; 
} 

+(void) removeFromNavigationController:(UINavigationController *)navigationController allOfViewControllerWithClass:(Class)viewControllerClass 
{ 
    NSMutableArray *keptViewControllers = [[NSMutableArray alloc]init]; 
    for (UIViewController *viewController in navigationController.viewControllers) 
     if (![viewController isKindOfClass:viewControllerClass]) 
      [keptViewControllers addObject:viewController]; 
    navigationController.viewControllers = keptViewControllers; 
} 

,你不想讓你的流行致電導航回可以刪除任何其他類:

[QuickView removeFromNavigationController:navigationController allOfViewControllerWithClass:[YourClassName class]]; 

在navigateToMenu方法。

+0

你說得對,這不是理想的解決方案,因爲它依賴於給定Kind的UIViewController。鄧肯的解決方案是正確的方法。坦率地說,你只需要維護添加到導航堆棧和popViewControllerAnimated的viewController的數量:適當的次數。比試圖維護自己的導航堆棧簡單得多。 – MDB983

相關問題