установить корневой контроллер представления в основной раскадровке

#ios #swift #xcode

#iOS #swift #xcode

Вопрос:

main.storyboard

итак, у меня есть эта раскадровка, и я хочу, чтобы пользователю был показан контроллер представления входа, если он не вошел в систему, или контроллер представления вкладок в противном случае. это мой код внутри делегата приложения :

`

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:                                       [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    FirebaseApp.configure()
    UITabBar.appearance().tintColor = .white
    
    // check user
    let authListener = Auth.auth().addStateDidChangeListener { auth, user in
        if user != nil {
            print("USER IS NOT NIL")
            userService.observeUserProfile(uid: user!.uid) { userProfile in
                userService.currentUserProfile = userProfile
            }
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let vc = storyboard.instantiateViewController(withIdentifier: "TabBarVC") as! UITabBarController
            self.window = UIWindow(frame: UIScreen.main.bounds)
            self.window?.rootViewController = vc
            self.window?.makeKeyAndVisible()
            
        } else {
            print("USER IS NIL")
            userService.currentUserProfile = nil
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let vc = storyboard.instantiateViewController(withIdentifier: "FirstVC") as! UIViewController
            vc.modalPresentationStyle = .fullScreen
            self.window = UIWindow(frame: UIScreen.main.bounds)
            self.window?.rootViewController = vc
            self.window?.makeKeyAndVisible()
        }
    }
}
 

`
Моя проблема в том, что если пользователь не зарегистрирован, это выглядит так:

экран входа в систему

Как вы можете видеть, представление не полноэкранное, хотя я указал это в делегате приложения, чтобы пользователь мог просто отклонить его и перейти на главный экран. Также на вкладке view controller у меня есть главный экран с воспроизводимым видео, а на экране входа в систему также отображается воспроизводимое видео в фоновом режиме, и оба видео воспроизводятся одновременно XD.Любые советы будут приветствоваться.

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

1. Одна из проблем, которую я могу заметить сразу, заключается в том, что ваша текущая логика обнаружения пользователя является асинхронной, что означает, что для ее завершения требуется время… Даже если это не корень вашей проблемы, это определенно то, что вы можете рассмотреть возможность изменения.

2. спасибо, теперь я понимаю, почему у меня были некоторые проблемы.. как я могу сделать его синхронным?

3. На этот вопрос нет единого «правильного» ответа, поскольку это зависит от множества факторов. Общий подход заключается в попытке «автоматического входа в систему», отображении некоторой формы индикатора загрузки, а затем принятии решения о получении ответа от вашей службы аутентификации.

Ответ №1:

изменить раскадровку -> viewcontroller —> инспектор атрибутов —> изменить представление с автоматического на полноэкранный режим

Ответ №2:

     let nav = UINavigationController()
    nav.navigationBar.isHidden = true

    //your Controller 
    let first = Router.shared.splashVC()
    let third = Router.shared.CustomTabbarVC()

    third.selectedIndex = 0

    //add multiple controller in array 

    nav.viewControllers = [first,third]
    UIApplication.shared.keyWindow?.rootViewController = nav
    UIApplication.shared.keyWindow?.makeKeyAndVisible()
 

Ответ №3:

Сначала выберите all ViewController и автоматически измените режим представления из полноэкранного режима в смоделированных показателях.

Добавлен UINavigationController в RootViewController

 let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "TabBarVC") as! UITabBarController
let navigationController = UINavigationController(rootViewController: vc)
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = navigationController
vc.navigationController?.isNavigationBarHidden = true
self.window?.makeKeyAndVisible()