Инициализировать tabbarcontroller из scenedelgate.swift

#ios #swift #uinavigationcontroller #uitabbarcontroller

#iOS #swift #uinavigationcontroller #uitabbarcontroller

Вопрос:

Я изменил свой первоначальный ViewController, используя scenedelegate.swift. Теперь я хочу инициализировать контроллер tabbar из scenedelegate.swift.

     guard let winScene = (scene as? UIWindowScene) else { return }
    window = UIWindow(windowScene: winScene)
    let storyboard = UIStoryboard(name: "Home", bundle: nil)
    let initialViewController = storyboard.instantiateViewController(identifier: "Home")
    let navController = UINavigationController(rootViewController: initialViewController)
    window?.rootViewController = navController
    window?.makeKeyAndVisible()
 

Главная страница.раскадровка

Комментарии:

1. Это тот же процесс, который вы уже выполнили для вашего initialViewController.

Ответ №1:

введите описание изображения здесь

 class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    private let storyboardName = "Main"
    private let tabbarControllerIdentifier = "TabBarController"
    
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        
        guard let windowScene = (scene as? UIWindowScene) else { return }
        
        let storyboard = UIStoryboard(name: storyboardName, bundle: nil)
        let tabBarController = storyboard.instantiateViewController(identifier: tabbarControllerIdentifier)
        let navigationController = UINavigationController(rootViewController: tabBarController)
        
        window = UIWindow(windowScene: windowScene)
        window?.rootViewController = navigationController
        window?.makeKeyAndVisible()
    }

}
 

Ответ №2:

Создайте подкласс UITabBarController и назначьте его контроллеру TabBar с идентификатором раскадровки. И затем,

  guard let winScene = (scene as? UIWindowScene) else { return }
    window = UIWindow(windowScene: winScene)
    let storyboard = UIStoryboard(name: "Home", bundle: nil)
    let initialViewController = storyboard.instantiateViewController(identifier: "TabBarController")
    let navController = UINavigationController(rootViewController: initialViewController)
    window?.rootViewController = navController
    window?.makeKeyAndVisible()
 

Комментарии:

1. Я попробовал ваш метод, он сработал, но в верхней части моего контроллера просмотра появляется белое пустое пространство. Вот моя иерархия раскадровки. i.stack.imgur.com/SxOYH.png . Я попытался установить видимое значение false в функции viewwillappear,, но это не сработало.