2017-06-25 74 views
1

我有多個標籤通過單獨的導航控制器連接。我想實例相同完的Pt VC,而不管其中的選項卡用戶通過4.ios swift - 從多個標籤實例化相同的VC

storyboard

選擇選項卡1當我選擇標籤1它顯示結束的Pt VC,因爲它是通過Segue公司連接。但是,當我選擇其他選項卡時,我手動嘗試按Tab控制器方法中所示推送EndPt VC。但它顯示空白屏幕。不管選項卡選擇如何顯示相同的End Pt VC?

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { 

    if let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "EndPointTVC") as? EndPtListTableViewController{ 
     viewController.selectedTab = self.selectedTab 

     if let navigator = self.navigationController { 
      navigator.pushViewController(viewController, animated: true) 
     } 
    } 


} 

回答

0

UITabBarController通過其委託UITabBarControllerDelegate的變化選項卡可以檢測。在下面的委託方法中,您可以將選定的視圖控制器轉換爲UINavigationController(這是我可以在附加的屏幕截圖中看到的)。

extension MyTabBarController: UITabBarControllerDelegate { 
    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { 
     let myVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MyViewControllerStoryID") as! MyViewController 
     let navController = viewController as! UINavigationController 
     navController.viewControllers = [myVC] 
     print(viewController) 
    } 
} 

現在,無論您選擇哪個選項卡,都會創建一個新的MyViewController實例。即使多次觸碰相同的選項卡,也會替換當前實例以獲取新的MyViewController實例。

+0

我添加了您提供給我的TabBarController類的擴展方法,它顯示黑屏時,我選擇標籤2,3,4。選項卡1工作,因爲End Pt VC通過導航控制器連接到選項卡1。我在擴展方法中加入了一個調試。看起來延伸從未被調用過。如何確保它被調用? – vrao

+0

我的錯誤,我忘了分配委託給tabbar控制器self.delegate = self ..它現在可以工作。謝謝 – vrao

1

嘗試從故事板實例化視圖控制器,然後呈現它。此外,請確保已在Identify部分中向目標視圖控制器提供故事板ID「EndPointTVC」。

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let viewController = storyboard.instantiateViewController(withIdentifier : "EndPointTVC") 
    viewController.selectedTab = self.selectedTab 
    self.present(viewController, animated: true) 
+0

我明白了第一個參數storyboadName:String是指EndPt VC storyboard ID。哪個是你所指的第二個參數vc:UIViewController?我不明白它來自哪裏? – vrao

+0

另外EndPt是一個UITableViewController。對不起,我提到它作爲ViewController – vrao

相關問題