2016-11-14 162 views
1

我有一個標籤欄控制器(帶有底部菜單),也是一個頂部菜單。問題是我不想將黃色和綠色視圖鏈接到標籤欄(因爲用戶將使用頂部菜單而不是底部菜單來更改視圖)。顯示已經在導航堆棧上的視圖控制器

我有一個問題,每次我點擊按鈕的視圖的新實例將堆棧(所以我最終有類似V1 - > V2 - > V3 - > V2 - > V4等等上)

我的部分解決方案是這樣的:

@IBAction func yellowViewButtonAction(_ sender: AnyObject) 
{ 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let controller = storyboard.instantiateViewController(withIdentifier: "YelloViewController") as! YelloViewController 

    if let viewControllers = navigationController?.viewControllers { 
     for viewController in viewControllers { 
      // some process 
      if viewController is YelloViewController { 
       print("View is on stack") 
      } 
     } 

     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let controller = storyboard.instantiateViewController(withIdentifier: "YelloViewController") as! YelloViewController 
     self.navigationController?.pushViewController(controller, animated: false) 
    } 
} 

我可以看到的看法是對導航堆棧,因爲forif語句是true。問題是,我如何檢索它而不是推送同一視圖的新實例? (因爲除了現在這個龐大的內存問題,我也失去了我對視圖的任何數據)。

我想保留堆棧中的所有內容。

實施例:

V1 - > V2 - > V3 - > V4(當前視圖)

如果我回到V1從V4我仍然希望有V4,V3及V2導航控制器上疊加。

另一個問題是,如果這種解決方案是蘋果可能拒絕的東西。

我很感激任何幫助。

enter image description here

回答

1

看起來你不使用,需要導航控制器。每當你打電話給self.navigationController?.pushViewController(controller, animated: false)時,該控制器的一個新實例即將堆棧。

理想情況下,您可以從導航的視圖控制器中調用popViewController。在創建標籤欄控制器的自定義行爲時,至少在我看來,完全按照您的計劃獲取導航邏輯非常困難。

在這種情況下,我通常會照顧手動顯示和隱藏視圖控制器。

@IBAction func didPressTab(sender: UIButton) { 
     let previousIndex = selectedIndex 
     selectedIndex = sender.tag 
     buttons[previousIndex].selected = false 
     let previousVC = viewControllers[previousIndex] 
     previousVC.willMoveToParentViewController(nil) 
     previousVC.view.removeFromSuperview() 
     previousVC.removeFromParentViewController() 
     sender.selected = true 
     let vc = viewControllers[selectedIndex] 
     addChildViewController(vc) 
     vc.view.frame = contentView.bounds 
     contentView.addSubview(vc.view) 
     vc.didMoveToParentViewController(self) 

    } 

其中每個「導航按鈕」具有唯一的ID並調用didPressTab函數。

我實際上是從本教程中瞭解到這一點:https://github.com/codepath/ios_guides/wiki/Creating-a-Custom-Tab-Bar

+0

我需要導航控制器,因爲當我按下黃色和綠色的意見我還是能看到底部欄菜單。就像我說過的,我希望視圖保持不變,如果我彈出,我將丟失視圖上的所有數據。 – Adrian

+0

您不需要導航控制器即可查看底部的菜單欄。看看鏈接中的教程,你會看到:)另外,我提供的代碼僅移動視圖,以便這些視圖控制器的「內部」狀態保持不變。 – repoguy

+0

即時通訊試圖說的是我不想自定義底部菜單欄,因爲我已經有一個。我希望能夠在導航控制器堆棧中的視圖之間切換。 – Adrian

相關問題