如何从Tab栏控制器以编程方式卸载视图控制器?

时间:2017-12-11 11:32:22

标签: ios swift uitabbarcontroller

我在故事板中创建了一个标签栏控制器,有5个标签栏项。我想以编程方式从" viewcontrollers"中删除一个视图控制器。标签栏堆栈的数组。当我删除上面的视图控制器时,我还希望应用程序显示一些其他选项卡项。我已尝试使用以下代码,但它无效。

if let tabBarController = self.storyboard?.instantiateViewController(withIdentifier: "tabbar") as? UITabBarController {
    tabBarController.viewControllers?.remove(at: 2)
    tabBarController.selectedIndex = 1
}

3 个答案:

答案 0 :(得分:1)

试试这个:

    if let tabBarController = self.storyboard?.instantiateViewController(withIdentifier: "tabbar") as? UITabBarController {
        var viewControllers = tabBarController.viewControllers
        viewControllers.remove(at: 2)
        tabBarController.viewControllers = viewControllers
        tabBarController.selectedIndex = 1
    }

答案 1 :(得分:1)

重新分配viewControllers财产,而不是您不想要的财产:

if let tabBarController = self.storyboard?.instantiateViewController(withIdentifier: "tabbar") as? UITabBarController {
    tabBarController.selectedIndex = 1
    var controllers = tabBarController.viewControllers
    controllers.remove(at: 2)
    tabBarController.viewControllers = controllers
}

现在这段代码还可以,但问题是以下几行:

let tabBarController = self.storyboard?.instantiateViewController(withIdentifier: "tabbar") as? UITabBarController

这会创建一个新的UITabBarController实例 - 但您想要访问由storyboads实例化并在屏幕上显示的实例。但是,如果没有更多背景信息,很难就如何访问它提供建议。考虑到你从直接嵌入标签栏控制器的viewController中调用此代码,我将从这开始:

if let tabBarController = self.tabBarController {
    tabBarController.selectedIndex = 1
    var controllers = tabBarController.viewControllers
    controllers.remove(at: 2)
    tabBarController.viewControllers = controllers
}

答案 2 :(得分:0)

BIT