簡體   English   中英

如何從 TabbarController 打開嵌入在導航 Controller 中的相同 VC

[英]How to open the same VC embedded in a Navigation Controller from a TabbarController

有 5 個選項卡,前 2 個選項卡需要打開相同的 VC,該 VC 將嵌入導航 controller。 所有的 VC 都在 storyboard 中。 根據這兩個中的哪一個被點擊,我需要傳遞一個值(我想我可以弄清楚),這將改變該 VC 的一些 UI 組件。

我到目前為止是這樣的:

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        let indexOfTab = tabBar.items?.firstIndex(of: item)
        switch indexOfTab {
        case 1:
               // Open 1st VC with 'x' UI components
        case 2:
               // Open 1st VC with 'y' UI components
}

所以我可以毫無問題地打開標簽 3 到 5,但前 2 個不能正常工作,因為它們嵌入在導航 controller 中。

預期結果:點擊標簽索引 1,然后點擊標簽索引 2(或相反)應該打開第二個 VC(或第一個,視情況而定)作為根視圖 controller

實際結果:點擊索引 1,然后點擊標簽索引 2(或相反)打開標簽索引 1 作為根視圖 controller 並推送標簽索引 2。

如何獲得預期的結果?

編輯:我想我知道為什么會這樣。 這是因為我已經為 storyboard 中的這兩個 VC 選擇了 VC,然后我也試圖以編程方式打開它們。 無論如何要在 storyboard 和編程的混合中做到這一點,還是我需要以編程方式重構整個標簽欄?

您可以創建兩個從 tabBarController 到您想要呈現的 VC 的鏈接,並為它們分配一個標識符,因此在 prepareForSegue 方法中您可以將您想要的值傳遞給 VC,如果兩個選項卡呈現兩個不同的實例,這將起作用。 相反,如果兩個選項卡顯示相同的實例,您可以將 VC 的實例保存在 prepareForSegueAction 中或將子 VC 設置為父級的委托(我個人更喜歡第二個選項),然后您可以使用該方法知道何時選項卡已被按下並使用該方法的實例將您需要的值傳遞給 VC。

暫無
暫無

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

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