简体   繁体   中英

UITabBarController shows blank screen

I am starting an app programmaticaly with no storyboards. When I try to make my UITabBarController the root view controller it looks like这个 The background color should be red and the tab item should be a house. What could be the problem?

SceneDelegate code:

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = (scene as? UIWindowScene) else { return }
               window = UIWindow(frame: windowScene.coordinateSpace.bounds)
               window?.windowScene = windowScene
               window?.rootViewController =  TabBarController()
               window?.makeKeyAndVisible()

    }

HomeViewController code:

import UIKit

class HomeViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .red
        // Do any additional setup after loading the view.
    }
    
}

TabBarController code:

import UIKit

class TabBarController: UITabBarController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupTab()
    }
    
    func setupTab(){
        let homeVC = HomeViewController()
        homeVC.tabBarItem = UITabBarItem(title: "Home", image: UIImage(named: "House"), tag: 0)
        let homeNC = UINavigationController(rootViewController: homeVC)
        tabBarController?.viewControllers = [homeNC]
    }
    
}

The work for setting up the tab view controller needs to be done while you are setting up the scene in the SceneDelegate. The HomeViewContoller's viewDidLoad was never being called.

 var homeNavigationController : UINavigationController!
    var secondHomeNavigationController : UINavigationController!
    
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
        // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
        // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
        guard let windowScene = (scene as? UIWindowScene) else { return }
        window = UIWindow(frame: windowScene.coordinateSpace.bounds)
        window?.windowScene = windowScene
        
        let tabBarController = TabBarController()

        homeNavigationController = UINavigationController.init(rootViewController: HomeViewController())
        secondHomeNavigationController = UINavigationController.init(rootViewController: HomeViewController())
        tabBarController.viewControllers = [homeNavigationController, secondHomeNavigationController]
 
 //       let item1 = UITabBarItem(title: "Home", image: UIImage(named: "House"), tag: 0)
        let item1 = UITabBarItem(tabBarSystemItem: .featured, tag: 0)
        let item2 = UITabBarItem(tabBarSystemItem: .bookmarks, tag: 1)
        homeNavigationController.tabBarItem = item1
        secondHomeNavigationController.tabBarItem = item2
        
        window?.rootViewController =  tabBarController
        window?.makeKeyAndVisible()

    }

class TabBarController: UITabBarController {

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

    }

}

class HomeViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .red
        // Do any additional setup after loading the view.
    }
    
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM