2015-04-23 94 views
-1

我的觀點很深,但沒有導航控制器綁定它們。我無法使用popToRootViewControllerAnimated,因爲我沒有導航控制器。我該如何回到故事板的初始視圖控制器,以及在解散完成後有什麼回調方法?如何在沒有導航控制器的情況下以編程方式展開5個控制器視圖?

+0

您是否考慮過使用導航控制器的功能,然後將其隱藏在每個視圖中,以便保持您喜歡的美感? – user3353890

+0

是的,但我正在尋找更優雅和最簡單的解決方案。 – hunterp

+0

您是否使用segues來呈現每個視圖控制器?如果是這樣,只需使用展開順序 – Paulw11

回答

0

的Objective-C語言實現

AppDelegate或以任何其他Util類實現的功能

- (void)customPopToRootViewController { 

    UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController; 
    //If you are using this method inside AppDelegate then write self.window.rootViewController 

    NSMutableArray *presentedViewControllers = [NSMutableArray array]; 
    while (topController.presentedViewController) { 

     [presentedViewControllers addObject:topController.presentedViewController]; 
     topController = topController.presentedViewController; 
    } 

    for (UIViewController *vc in presentedViewController) { 

     [vc dismissViewControllerAnimated:YES completion:nil]; 
    } 
} 

然後在你當前的視圖控制器中調用這個函數。

[(AppDelegate*)[UIApplication sharedApplication].delegate customPopTopToRootViewController]; 
+0

和topController中使用的回調方法是什麼? – hunterp

+0

爲什麼你需要一個回調方法?當你關閉視圖控制器時,它會從內存中釋放,現在如果你試圖在你的topViewControlelr中實現一個回調,那麼應用程序會崩潰 –

0

給這個鏡頭。我不確定哪種內存管理問題會深入到5個視圖中,如果有的話,但值得一試。

var storyBoard = UIStoryboard(name: "Main", bundle: nil) 
var vc = storyBoard.instantiateInitialViewController() as! CustomViewController 
self.presentViewController(vc, animated: true) {() -> Void in 
     //Do something in this completion block  
} 
0

您可以通過以下方法刪除視圖。 另外,如果你已經將它們添加爲childViewController,你將不得不刪除它。

//移除子視圖

for (UIView *v in [self.view subviews]) 
{ 
    [v removeFromSuperview]; 
} 

//刪除child視圖控制器

for (UIViewController * controller in [self childViewControllers]) 
{ 
    [controller removeFromParentViewController]; 
} 
相關問題