TabBarController加载视图后如何添加另一个TabBarItem

时间:2019-04-25 09:13:55

标签: ios swift uitabbarcontroller dynamically-generated

我希望能够在满足特定条件后添加新的TabBarItem。因此,最初该应用有两个TabBarItems,但是如果您选择以管理员身份登录,我希望显示第三个TabBarItem

我可以在扩展TabBarItem的{​​{1}}的{​​{1}}的{​​{1}}中添加viewDidLoad罚款。但是,如果我添加了一个名为TabBarController的函数,该函数调用完全相同的代码,则会执行该代码,但视图不会得到更新。

UITabBarController

现在在我从中调用方法的类中(省略了一些不相关的代码

addNewTabBar

2 个答案:

答案 0 :(得分:0)

您尝试获取自己的TabBarController,但是又有了另一个。您应该获取TabBarController的实例。您可以通过几种方法来达到目的。为了简单起见,我建议您选择其中之一。

首先,在您的main中声明var TabBarController

static var main : TabBarController? = nil

viewDidLoadviewWillAppear上添加代码:

TabBarController.main = self // a part of 'singletone' approach

并在您的另一个控制器中使用:

TabBarController.main?. addNewTabBarItem()

将类用于单个实例非常重要。

答案 1 :(得分:0)

第一个标签页的视图控制器中的这一行:

let tbController = TabBarController()

创建TabBarController new 实例-它不提供对现有实例的访问。

因此,在第一个标签的视图控制器中:

class HjelmslundFirstViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // this gets a reference to the existing custom TabBarController
        if let tbc = self.tabBarController as? TabBarController {
            tbc.addNewTabBarItem()
        }

    }

}

请注意,应始终拆开可选项,并检查有效的对象。因此,在您的自定义TabBarController类中:

func addNewTabBarItem(){

    let sb = UIStoryboard(name: "Data", bundle: nil)

    if let roomChooserVC = sb.instantiateViewController(withIdentifier: "roomchooser") as? RoomChooserController {
        roomChooserVC.tabBarItem = UITabBarItem(tabBarSystemItem: .downloads, tag: 3)
        self.viewControllers?.append(roomChooserVC)
    }

}

当然,您还需要添加错误处理代码,以防if条件失败。