我有一个用来登录我的应用程序的故事板。我把这个嵌入到一个UINavigationController中。登录到我的应用程序(并转换到一个新的故事板)后,我想要“突破”这个导航控制器(即,在我登录后,我不再想回到登录屏幕)。我不想用另一个导航控制器代替导航控制器--一旦我到达这个点,我希望根本不使用导航控制器。
如何处理这件事是最好的方法?谢谢!
FYI:使用Swift 3
发布于 2017-09-03 22:36:56
我在我的应用程序中这样做的方法是,为身份验证部分提供一个导航控制器,然后为主应用程序提供另一个导航控制器。
因此,一旦用户登录,我将用新的导航控制器替换根视图控制器,并将初始VC设置为显示:
APIClient.authenticate(username, password) { result in
if result, let appDelegate = UIApplication.delegate as? AppDelegate {]
let mainNav = MainNavigationController()
let mainVC = MainViewController()
mainNav.setViewControllers([mainNav])
appDelegate.window?.rootViewController = mainNav
}
}然后,您的AuthNavigation控制器将被取消,用户将无法导航回认证部分的应用。
此方法有效地重置视图层次结构。当您通过身份验证流时,您将把项推到导航堆栈上。
一旦您的身份验证流完成,最有效的方法就是创建一个新的导航堆栈并用它替换根控制器。然后,旧堆栈中的所有VC都将被去初始化,并从内存中删除,而您的新导航堆栈将不知道其中的任何内容。把你的新导航和主应用程序视图控制器放在它的顶层,这就是你想要的。
发布于 2017-09-03 22:32:51
我认为处理这个问题的最佳做法是在启动屏幕后(不包括在导航控制器中)使您的登录视图成为根用户,所以当您完成登录过程时,只需显示您的UINavigationController。这在任何情况下都是好的,您的根目录现在是您的导航控制器,除非您取消导航控制器(您可以使用它注销),否则不能返回到登录屏幕。
https://stackoverflow.com/questions/46027874
复制相似问题