如何在运行时在 TabBarcontroller 中排列标签栏项目?
Posted
技术标签:
【中文标题】如何在运行时在 TabBarcontroller 中排列标签栏项目?【英文标题】:How to arrange tabbar item at run time in TabBarcontroller? 【发布时间】:2016-12-14 06:11:00 【问题描述】:我有带有 5 个视图控制器“A”、“B”、“C”、“D”、“E”的 TabBarcontroller。但我需要在运行时决定顺序取决于 API 响应。 例如。有时我需要显示“A”、“D”、“C”、“E”、“B”,即以随机顺序显示,或者有时我只需要显示“D”、“B”、“C”, “一个”
有没有办法处理这种情况?
我正在使用 Swift 3,但即使我掌握了一些逻辑或可能的方法,它也有助于解决我的问题。
我已经使用故事板创建了 TabBar 和 viewcontroller。
【问题讨论】:
如何创建标签栏控制器及其视图控制器? 这个问题很好,但不应该这样做,因为人们有肌肉记忆,而你的功能会搞砸。 @rmaddy 我更新了我的问题 @NikhilManapure 你是对的,但我们有一些功能..同意你,但我们可以在运行时以相同的顺序删除和添加随机 tabbaritems @sss 这可能是可能的,但您需要以编程方式创建 Tabbar 而不是使用情节提要。 【参考方案1】:if let tabBarController = ( self.window?.rootViewController as? UITabBarController )
if var vcArray = tabBarController.viewControllers
//Arrange the array according to your need and set them again.
tabBarController.viewControllers = vcArray
//Arrange the array according to your need and set them again.
var items = tabBarController.tabBar.items
tabBarController.tabBar.items = items
您必须处理selectedViewController
。我已经在appdelegate中编写了上面的代码,但是您可以在上面的代码中获取appDelegate的对象并用作self
。
另请参阅 this 以获取另一种解决方案,您可以在其中以编程方式创建 tabCtrl 并对其进行操作。
【讨论】:
【参考方案2】:您还没有包含代码,所以有点难以回应。
我要做的是,一旦你有了新的订单,就创建一个新的 TabBarController 并让新的覆盖现有的。
为了使用户更符合逻辑,您可以将用户移动到相同的 VC "A" "B" "C" ..(按新顺序)或让用户留在(替换的)屏幕上(第一/第二等)
【讨论】:
如果在storyboard中创建tabbarcontroller,这可能吗?【参考方案3】:将 UITabBarController 的 viewControllers 属性设置为新排序的 viewContoller 数组。
下面的示例是让您的 viewControllers 反向排序(从 AppDelegate 调用)。
if let wTB = ( self.window?.rootViewController as? UITabBarController )
if let wVCs = wTB.viewControllers
wTB.viewControllers = [ wVCs[ 4 ], wVCs[ 3 ], wVCs[ 2 ], wVCs[ 1 ], wVCs[ 0 ] ]
【讨论】:
以上是关于如何在运行时在 TabBarcontroller 中排列标签栏项目?的主要内容,如果未能解决你的问题,请参考以下文章