#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()
}