繁体   English   中英

如何以编程方式从选项卡栏控制器中卸载视图控制器?

[英]How to programatically unload a view controller from Tab bar controller?

我在情节提要中创建了一个标签栏控制器,其中包含5个标签栏项目。 我想从标签栏堆栈的“ viewcontrollers”数组中以编程方式删除一个视图控制器。 我还希望该应用在删除上述视图控制器时将其他选项卡项显示为选中状态。 我尝试使用以下代码,但无法正常工作。

if let tabBarController = self.storyboard?.instantiateViewController(withIdentifier: "tabbar") as? UITabBarController {
    tabBarController.viewControllers?.remove(at: 2)
    tabBarController.selectedIndex = 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
    }

重新分配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
}
if let tabBarController = self.tabBarController {

    let indexToRemove = 3

    if indexToRemove < tabBarController.viewControllers?.count {

        var viewControllers = tabBarController.viewControllers

        viewControllers?.remove(at: indexToRemove)

        tabBarController.viewControllers = viewControllers
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM