![](/img/trans.png)
[英]Segue not working from the viewcontroller inside tabbar controller
[英]Segue from one ViewController to another ViewController inside a Tab Bar Controller?
在界面構建器中,我有一個UITabBarController
並將其設置為初始視圖控制器。 從標簽欄控制器,我鏈接了三個獨立的ViewController; 兩個UIViewController
和一個UITableViewController
。 我將所有這三個視圖都嵌入了UINavigationController
,因為這些視圖中的每一個最終都會選擇到一個新視圖。
問題:
我現在想使用一個按鈕將一個UIViewController
鏈接到UITableViewController
,以選擇到表視圖。 這樣,我可以將信息(即func prepareForSegue()
傳遞到表視圖。 我想將標簽欄控制器保持在底部,但是我不希望能夠通過視圖頂部的UIBarButtonItem
從當前的UITableViewController
返回到以前的UIViewController
; 這就是底部的標簽欄的作用。
但是,每次我選擇“顯示”表視圖時(實際上是對表視圖導航控制器的選擇),表視圖頂部和底部的導航欄都會消失。 是否有防止這種情況發生的方法?
我也嘗試過直接將“ Show”設置為表格視圖,在這種情況下,標簽欄可見,但是隨后它在視圖頂部顯示了一個“ back”按鈕,以將其設置為發送方UIViewController
。 我不願接受只隱藏后退按鈕的解決方案,因為當我想從表視圖本身導航到詳細視圖時,我會遇到麻煩,因為我將繞過UITableViewController
的UINavigationController
。
任何解決方案將不勝感激。 數小時以來,我一直在試圖解決這個問題,而我正要把頭放在電腦屏幕上。 我還考慮過只單擊按鈕上的tabBarController?.selectedIndex
即可切換到表格視圖,然后使用NSUserDefaults
傳遞信息,但這是NSUserDefaults
,因為我將傳遞自定義對象,並且必須進行編碼並解碼每個自定義字段。
正如您所說,我使用segue來實現它,但是仍然會使用UIViewController
的UINavigationController
,這似乎有些混亂。 所以我實際上認為selectedIndex
可能是最好的selectedIndex
,因為一旦更改為UITableViewController
您將進入正確的導航堆棧。
除了使用NSUserDefaults
,為什么不直接從UIViewController
引用UITableView
本身,設置所需的值,然后使用self.tabBarController.selectedIndex
交換給它。
因此,對於上面的場景,假設UITableViewContollrer
是UITabBarController
的第三個視圖,您將執行以下操作:
通過在其中設置一些預定義的var
,將所需的任何內容傳遞給UITabBarController
。 例如,如果UITableViewController
有一個名為saveMe
的String
,則在UIViewController
執行以下操作:
let navController = self.tabBarController?.viewControllers![2] as! UINavigationController let tableViewController = navController.viewControllers.first as! JarListTableViewController tableViewController.saveMe = "Saved string here"
使用以下方法交換到UITableViewController
:
self.tabBarController?.selectedIndex = 2
唯一的問題是使用selectedIndex
不會執行過渡動畫,但不確定是否需要此動畫。 如果您這樣做,此鏈接可能會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.