无法看到以编程方式快速添加到UITabBar的控制器

人气:1,064 发布:2022-10-16 标签: ios swift uitabbarcontroller uitabbaritem

问题描述

我以编程方式从情节提要添加了2个选项卡栏项目,并添加了一个UITabBarItem-菜单。我可以成功地打开与我使用故事板创建的tabBarItems相对应的控制器。但是,当我点击"菜单"时,会出现一个空白的黑屏

@objc public class MainScreenTabsController : UITabBarController {
public override func viewDidLoad() {
    super.viewDidLoad()
    let tabController = MyViewController()
    let tabBarItem = UITabBarItem(title: "Menu", image: UIImage(named: "more-options.png"), selectedImage: UIImage(named: "more-options"))
    tabController.tabBarItem = tabBarItem
    var array = self.viewControllers
    array?.append(tabController)
    self.viewControllers = array
}

public func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
    return true;
}

public override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
}
}

我遵循了几个添加选项卡栏项目的教程,但它们都有我编写的代码。我是不是错过了一些非常基本的东西?

编辑:

菜单控制器的类

@objc public class MyViewController:UIViewController {

public override func viewDidLoad() {
    super.viewDidLoad()
}

public override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
}
}

推荐答案

您的应用程序正在执行代码告诉它执行的操作。您正在创建MyViewController的实例,并将其添加到UITabBarController的视图控制器数组。

您的MyViewController类文件只是定义了一个空白的黑色视图。

我猜您在故事板中创建了一个要用作的ViewController?如果是,您需要从情节提要中实例化它。

编辑情节提要时,将MyViewController类分配给要使用的VC,还要给它一个Storyboard ID-例如MyVC。然后,将viewDidLoad函数编辑为:

public override func viewDidLoad() {
    super.viewDidLoad()

    // wrong way
    //  let tabController = MyViewController()

    if let tabController = storyboard?.instantiateViewController(withIdentifier: "MyVC") as? MyViewController {

        let tabBarItem = UITabBarItem(title: "Menu", image: UIImage(named: "more-options.png"), selectedImage: UIImage(named: "more-options"))
        tabController.tabBarItem = tabBarItem
        var array = self.viewControllers
        array?.append(tabController)
        self.viewControllers = array

    }

}

655