如何在UITabBarController中为标签使用相同的ViewController

时间:2017-12-15 08:41:52

标签: ios swift uitabbarcontroller uitabbar

我需要为一个UIViewController提供两个不同的选项卡。 我以编程方式实现UITabBarController。

下面的代码就像向我展示两个不同的标签,但是当我选择firstVC时它有黑屏,secondVC是好的。

如何为同一个ViewConetroller使用两个不同的标签?

class VPTabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let myWebView = WebKitViewController.storyboardInstance()

        let mainVC = MainViewController.storyboardInstance()
        mainVC?.tabBarItem.title = "Search"
        mainVC?.tabBarItem.image = UIImage(named:"search")

        let firstVC = myWebView
        firstVC?.source = "first"
        let accountNavigationVC = UINavigationController(rootViewController: firstVC!)
        accountNavigationVC.tabBarItem.title = "First"
        accountNavigationVC.tabBarItem.image = UIImage(named:"first")

        let secondVC = myWebView
        secondVC?.source = "second"
        let myTripsNavigationVC = UINavigationController(rootViewController: secondVC!)
        myTripsNavigationVC.tabBarItem.title = "Second"
        myTripsNavigationVC.tabBarItem.image = UIImage(named:"Second")

        let viewControllerList = [ mainVC, firstVC, secondVC ]

        viewControllers = viewControllerList as? [UIViewController]
    }
}

1 个答案:

答案 0 :(得分:1)

我想你可以通过创建两个包装器视图控制器来破解它,它们在视图中不包含任何其他内容,只需要在两个选项卡上都有myWebView的视图。现在创建这个包装器的两个实例,它们都包含与子视图相同的myWebView

现在你必须记住,同一个视图不能是两个不同视图的子视图(它只能有一个超级视图)。通过将myWebView.view作为子视图添加到包装器中,将其从先前的超级视图中删除。因此,您必须监听选项卡更改,以便在呈现包装器时重新添加它(每次呈现包装器时,您必须将myWebView作为子视图添加到呈现的包装器中)。