如何在TabBarcontroller中运行时安排tabbar项?

时间:2016-12-14 06:11:00

标签: ios swift swift3 uitabbarcontroller uitabbaritem

我有TabBarcontroller,带有5个viewcontroller" A"," B"," C"," D"," E& #34 ;.但我需要确定运行时的顺序取决于API响应。 对于前有一段时间我需要展示" A"," D"," C"," E"," B"即,以随机顺序,或者有时我只需要显示" D"," B"," C"," A"

有没有办法处理这种情况?

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

我使用storyboard创建了TabBar和viewcontroller。

enter image description here

3 个答案:

答案 0 :(得分: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并对其进行操作。

答案 1 :(得分:0)

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

我要做的是,只要你有了新订单,就创建一个新的TabBarController并让新的TabBarController覆盖现有的TabBarController。

为了使用户更合乎逻辑,您可以将用户移动到同一个VC" A" " B" " C" ..(按新订单)或让用户留在(替换)屏幕(第一/第二等)

答案 2 :(得分:0)

将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 ] ]
    }
}