почему мой навигационный контроллер равен нулю даже после встраивания навигационного контроллера в storyboard и использования push segue?

#ios #swift #uinavigationcontroller

#iOS #swift #uinavigationcontroller

Вопрос:

Я пытался прочитать несколько потоков в Stackoverflow, но я думаю, что я реализовал их все, но все равно это не работает. вот моя раскадровка

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

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

и когда нажата кнопка «Назад», я использую приведенный ниже код:

 self.navigationController?.popViewController(animated: true)
  

но, к сожалению, после проверки, навигационный контроллер равен нулю, и я не могу вернуться к предыдущему VC.

Я установил некоторый код в делегате приложения следующим образом, чтобы настроить навигацию. если пользователь уже вошел в систему, то он будет перенаправлен на HomeVC (главная панель вкладок), в противном случае он будет перенаправлен на последовательность входа, подобную моей раскадровке выше

 @UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        // to print Local Database Location, uncomment the line below if you want to trace the location of Realm Database / User Default
        // print("Location of Realm Database: (Realm.Configuration.defaultConfiguration.fileURL)")



        checkHasLoggedInOrNot()




        return true
    }




}

extension AppDelegate {
    // MARK: - Helper Methods

    func checkHasLoggedInOrNot() {
        let userHasLoggedIn = AuthService.shared.hasLoggedIn

        if userHasLoggedIn {
            goToMainTabBar()
        } else {
            goToAuthVC()
        }
    }


}

extension AppDelegate {
    // MARK: - Navigation

    func goToMainTabBar() {
        let storyboard = UIStoryboard(name: StoryBoardName.Main.rawValue, bundle: nil)
        let mainTabBar = storyboard.instantiateViewController(withIdentifier: MainStoryboardData.StoryBoardID.MainTabBar.rawValue)
        window?.rootViewController = mainTabBar
    }

    func goToAuthVC() {
        let storyboard = UIStoryboard(name: StoryBoardName.Auth.rawValue, bundle: nil)
        let authVC = storyboard.instantiateViewController(withIdentifier: AuthStoryboardData.StoryBoardID.AuthVC.rawValue)
        window?.rootViewController = authVC
    }
}
  

возможно, проблема в приведенном ниже коде?

 func goToAuthVC() {
        let storyboard = UIStoryboard(name: StoryBoardName.Auth.rawValue, bundle: nil)
        let authVC = storyboard.instantiateViewController(withIdentifier: AuthStoryboardData.StoryBoardID.AuthVC.rawValue)
        window?.rootViewController = authVC
    }
  

потому что он указывает на AuthVC? не для навигационного контроллера?

что здесь пошло не так?

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

1. Откуда вы вызываете — self.navigationController?.popViewController(animated: true) ?

2. @AmirKhan из ВК, у которого есть кнопка «Назад» (правая на первом изображении)

3. Вы настраиваете свой firstController как RootViewController и, во-вторых, как вы нажимаете на свой второй контроллер, покажите какой-нибудь код?

4. и вы segue хотите перейти к следующему ViewController? Проверьте navigation stack , пусто оно или нет.

5. Я добавляю некоторые коды, я инициирую VC из appdelagate. @MuhammadWaqasBhati Я не знаю, как увидеть firstVC как rootVC или нет

Ответ №1:

Push/Pop возможно только при наличии Navigation stack в window .

Замените свой goToAuthVC следующим —

 func goToAuthVC() {

    let storyboard = UIStoryboard(name: StoryBoardName.Auth.rawValue, bundle: nil)
    let authVC = storyboard.instantiateViewController(withIdentifier: AuthStoryboardData.StoryBoardID.AuthVC.rawValue)
    let navigationController  = UINavigationController(rootViewController: authVC)
    window?.rootViewController = navigationController
    window?.makeKeyAndVisible()

}