[英]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.