如何在 TabBarcontroller 运行 时间安排标签栏项目?

How to arrange tabbar item at run time in TabBarcontroller?

我有 5 个 viewcontroller "A"、"B"、"C"、"D"、"E" 的 TabBarcontroller。但是我需要在运行时决定顺序取决于 API 响应。 例如。有时我需要显示 "A"、"D"、"C"、"E"、"B" 即随机顺序,或者有时我只需要显示 "D"、"B"、"C"、"A"

有什么办法可以处理这种情况吗?

我正在使用 Swift 3,但即使我得到了一些逻辑或可能的方法,它也可以帮助解决我的问题。

我使用故事板创建了 TabBar 和 viewcontroller。

你没有包含代码,有点难回复

我会做的是,一旦您有了新订单,就创建一个新的 TabBarController 并让新的覆盖现有的。

为了让用户更符合逻辑,您可以将用户移动到相同的 VC "A" "B" "C" ..(以新顺序)或者让用户留在(替换的)屏幕上(first/second 等)

将您的 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 ] ]
    }
}
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 并对其进行操作。