ios swift - 从多个选项卡实例化相同的VC

时间:2017-06-25 21:55:49

标签: ios swift uiviewcontroller

我有多个标签通过单独的导航控制器连接。我想实例化相同的End Pt VC,无论哪个标签用户选择标签1到4.

storyboard

当我选择Tab 1时,它显示End Pt VC,因为它是通过Segue连接的。但是当我选择其他选项卡时,我手动尝试按下选项卡控制器方法中显示的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)
        }
    }


}

2 个答案:

答案 0 :(得分:1)

尝试从故事板中实例化viewcontroller,然后呈现它。此外,请确保您已为目标视图控制器提供故事板ID" EndPointTVC"在识别部分。

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

答案 1 :(得分: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实例的当前实例。