簡體   English   中英

在一個標簽欄控制器中從一個ViewController切換到另一個ViewController?

[英]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 我不願接受只隱藏后退按鈕的解決方案,因為當我想從表視圖本身導航到詳細視圖時,我會遇到麻煩,因為我將繞過UITableViewControllerUINavigationController

任何解決方案將不勝感激。 數小時以來,我一直在試圖解決這個問題,而我正要把頭放在電腦屏幕上。 我還考慮過只單擊按鈕上的tabBarController?.selectedIndex即可切換到表格視圖,然后使用NSUserDefaults傳遞信息,但這是NSUserDefaults ,因為我將傳遞自定義對象,並且必須進行編碼並解碼每個自定義字段。

正如您所說,我使用segue來實現它,但是仍然會使用UIViewControllerUINavigationController ,這似乎有些混亂。 所以我實際上認為selectedIndex可能是最好的selectedIndex ,因為一旦更改為UITableViewController您將進入正確的導航堆棧。

除了使用NSUserDefaults ,為什么不直接從UIViewController引用UITableView本身,設置所需的值,然后使用self.tabBarController.selectedIndex交換給它。

因此,對於上面的場景,假設UITableViewContollrerUITabBarController的第三個視圖,您將執行以下操作:

  1. 通過在其中設置一些預定義的var ,將所需的任何內容傳遞給UITabBarController 例如,如果UITableViewController有一個名為saveMeString ,則在UIViewController執行以下操作:

     let navController = self.tabBarController?.viewControllers![2] as! UINavigationController let tableViewController = navController.viewControllers.first as! JarListTableViewController tableViewController.saveMe = "Saved string here" 
  2. 使用以下方法交換到UITableViewController

     self.tabBarController?.selectedIndex = 2 

唯一的問題是使用selectedIndex不會執行過渡動畫,但不確定是否需要此動畫。 如果您這樣做,此鏈接可能會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM