2015-10-12 151 views
0

在界面生成器中,我有一個UITabBarController,它被設置爲初始視圖控制器。在標籤欄控制器中,我鏈接了三個獨立的ViewController;兩個UIViewController和一個UITableViewController。我已將這三個視圖嵌入UINavigationController之內,因爲這些視圖中的每一個都將最終延伸到新視圖。從一個ViewController繼續到Tab Bar Controller內的另一個ViewController?

Interface Builder

問題:

我現在想用一個按鈕,原因請看錶視圖鏈接的UIViewController的之一的UITableViewController。這樣我可以將信息,即func prepareForSegue()傳遞給表格視圖。我想將標籤欄控制器保持在底部,但是我不希望能夠通過位於視圖頂部的UIBarButtonItem從當前的UITableViewController回到之前的UIViewController;這就是底部的標籤欄。但是每次我繼續「顯示」表格視圖(它實際上是表格視圖導航控制器的一個細節)時,表格視圖頂部和底部的導航欄消失。無論如何要防止這種情況發生?

我也嘗試過segue「Show」直接到表視圖,在這種情況下,標籤欄是可見的,但隨後它顯示在視圖頂部的「後退」按鈕以繼續發送回UIViewController。我對接受只隱藏後退按鈕的解決方案猶豫不決,因爲我覺得當我想從表視圖導航到詳細視圖時,我會遇到問題,因爲我會繞過UITableViewControllerUINavigationController

任何解決方案將不勝感激。我一直試圖解決這個問題好幾個小時,而我即將把我的腦袋通過我的電腦屏幕。此外,我想在按鈕單擊上使用tabBarController?.selectedIndex轉移到表視圖,然後使用NSUserDefaults傳遞信息,但這是不可能的,因爲我會傳遞一個自定義對象,並且必須對每個對象進行編碼和解碼自定義字段。

回答

2

我用一個segue來達到目的,就像你說的那樣,你仍然會使用UIViewControllerUINavigationController這看起來有點亂。所以我實際上認爲selectedIndex可能是最好的方式,因爲一旦您更改爲UITableViewController,您將進入正確的導航堆棧。

而不是使用NSUserDefaults,爲什麼不從UIViewController引用UITableView本身,設置所需的值,然後使用self.tabBarController.selectedIndex交換到它。

因此,對於您的方案上面,假設UITableViewContollrerUITabBarController第三個觀點,你會做一些這樣的:無論你通過設置要進入UITabBarController

  1. 通過一些預先定義其中有var。使用

    let navController = self.tabBarController?.viewControllers![2] as! UINavigationController 
    let tableViewController = navController.viewControllers.first as! JarListTableViewController 
    tableViewController.saveMe = "Saved string here" 
    
  2. 交換到UITableViewController:例如,如果有一個在UITableViewController稱爲saveMeString,然後做在UIViewController以下

    self.tabBarController?.selectedIndex = 2 
    

與唯一的問題這是使用selectedIndex不會執行過渡動畫,但不知道如果你需要這個。 This link could help if you do.

+0

感謝這工作...有點。我必須改變一件事。你不能像'!JarListTableViewController'那樣強制使用'UINavigationController'。而不是'讓tableViewController = navController as! JarListTableViewController'你必須說'讓tableViewController = navController.viewControllers [0] as! JarListTableViewController'。就這樣。如果你更新你的答案,我會upvote並接受它。 – Yonny

+0

Woops,對不起。我忘了添加該部分。我實際上做了一個稍微不同的方式,我已經在上面進行了更正。希望你不會浪費太多時間在我的愚蠢錯誤上! – myles

+0

無論哪種方式將工作,我只喜歡使用完整的單詞而不是數字。 – myles

相關問題