#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,, но это не сработало.