2017-03-09 41 views
0

我是iOS和Swift的新手。在我的故事板中,我設置了一個標籤欄控制器,其中最右邊的項目是一個「更多」項目,導致嵌入導航控制器中的表格視圖控制器。表格視圖(靜態)中的每個項目都轉到視圖控制器(稱爲「視圖1」,「視圖2」和「視圖3」)。如何強制一個標籤欄項目轉到該項目的根級別,每當它輕拍

默認行爲如下。假設我點擊「更多」。然後,我正在查看包含「查看1」,「查看2」和「查看3」的單元格的表格。然後我們說我點擊「查看1」。如果我然後在標籤欄控制器中單擊一個不同的項目,然後再次單擊「更多」,而不是帶我到表視圖,它會帶我到「視圖1」,因爲這是我最後一次點擊時最後一件事情在「更多」中。我想要的行爲是,如果我用另一個標籤欄元素輕敲「更多」,任何時候我再次點擊「更多」,我希望它總是帶我到表視圖,不管我是什麼之前在「更多」中查看。

本質上,我希望「更多」忘記其狀態或重置其狀態。

我該如何強制這種情況發生?

+0

當你從tableview中點擊「View 1」你如何顯示ViewController?推? –

+0

對於storyboard segue(在「Kind」下面),其顯示「顯示(例如推)」。所以我猜猜推? – tobogranyte

+0

顯示ViewController1後底部欄是否可見? –

回答

1

我會引導你通過一個例子來確保清楚。

考慮這是在情節串連圖板:

enter image description here

它有一個的TabBar視圖控制器連接到:

  • 視圖控制器(在一個在頂部)。
  • 嵌入在導航控制器(底部的一個)中的表格視圖控制器。它具有靜態單元格的桌面視圖,當點擊它時,它會推向另一個視圖控制器。

到目前爲止好!現在,第一視圖控制器類應符合UITabBarControllerDelegate並實現tabBarController(_:didSelect:)方法,如下所示:

class ViewController: UIViewController, UITabBarControllerDelegate { 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     tabBarController?.delegate = self 
    } 

    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { 
     // im my example the desired view controller is the second one 
     // it might be different in your case... 
     let secondVC = tabBarController.viewControllers?[1] as! UINavigationController 
     secondVC.popToRootViewController(animated: false) 
    } 
} 

注:如果你有更多連接的TabBar視圖控制器絲束視圖控制器,你應該應用此代碼到第一個視圖控制器應該出現在tabbar視圖控制器中。

就是這樣!

輸出:

enter image description here

歡呼起來!希望這有助於。

+0

謝謝!花了我一段時間來回到這個問題上,弄清楚它是如何工作的,因爲我通常是一個Rails開發人員,而且對iOS來說非常新,這是非常非常不同的。但是,這完美的作品! – tobogranyte

+0

歡迎!你可以詢問任何不可理解的東西,我試過了 - 你可以看到 - 儘可能地說清楚。很高興幫助:) –

+0

在故事板上,哪個ViewController應該具有上面定義的ViewController類作爲其類?我試圖將其設置爲我的標籤欄控制器,但它只接受TabBarController類。解決方案:我發現您將代碼添加到TabBar上的第一個ViewController。 – Willy

相關問題