Ios 将导航控制器限制为一组UIViewController
Ios 将导航控制器限制为一组UIViewController,ios,uiviewcontroller,storyboard,Ios,Uiviewcontroller,Storyboard,是否可以将NavigationController限制为某一组UIViewController。如图所示,我需要导航控制器,但仅用于登录/创建用户会话。一旦登录,我显然不希望用户能够返回(除了注销)。我怎样才能做到这一点?我想不出来。您可以在需要时更改导航控制器的堆栈,例如: func logIn() { //Delete all presented view controllers up to a point navigationController.setViewControll
是否可以将NavigationController限制为某一组UIViewController。如图所示,我需要导航控制器,但仅用于登录/创建用户会话。一旦登录,我显然不希望用户能够返回(除了注销)。我怎样才能做到这一点?我想不出来。您可以在需要时更改导航控制器的堆栈,例如:
func logIn() {
//Delete all presented view controllers up to a point
navigationController.setViewControllers([], animated: false)
//Create new view controller
let viewController = ....
navigationController.pushViewController(viewController, animated: true)
}
看一看,这可能会给你一些想法
如果您想将以前的视图控制器保留在堆栈中,而只是禁止用户弹出到它们,那么它可能是子类UINavigationController并重写
func-popViewController(动画:Bool)->UIViewController?
的最佳解决方案,您可以在需要时更改导航控制器的堆栈,例如:
func logIn() {
//Delete all presented view controllers up to a point
navigationController.setViewControllers([], animated: false)
//Create new view controller
let viewController = ....
navigationController.pushViewController(viewController, animated: true)
}
看一看,这可能会给你一些想法
如果您想将以前的视图控制器保留在堆栈中,而只是禁止用户弹出它们,那么它可能是子类UINavigationController并覆盖
func-popViewController(动画:Bool)->UIViewController?
转到情节提要->选择导航控制器->属性检查器->取消选中的最佳解决方案“显示导航栏”属性
然后选择登录/注册和TabBarController之间的关系,并将其删除
登录后,您可以将TabBarController(或任何相关控制器)设置为rootViewController。当应用程序启动时,您可以在AppDelegate.swift
文件中检查它,如下所示:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
if Auth.auth().currentUser != nil {
let tabBarController = storyboard.instantiateViewController(withIdentifier: "tabBarcontroller") as! TabBarController
self.window?.rootViewController = tabBarController
self.window?.makeKeyAndVisible()
}
else
{
let loginNavController = storyboard.instantiateViewController(withIdentifier: "LoginNavController") as! UINavigationController
self.window?.rootViewController = loginNavController
self.window?.makeKeyAndVisible()
}
return true
}
转到情节提要->选择导航控制器->属性检查器->取消选中“显示导航栏”属性 然后选择登录/注册和TabBarController之间的关系,并将其删除 登录后,您可以将TabBarController(或任何相关控制器)设置为rootViewController。当应用程序启动时,您可以在
AppDelegate.swift
文件中检查它,如下所示:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
if Auth.auth().currentUser != nil {
let tabBarController = storyboard.instantiateViewController(withIdentifier: "tabBarcontroller") as! TabBarController
self.window?.rootViewController = tabBarController
self.window?.makeKeyAndVisible()
}
else
{
let loginNavController = storyboard.instantiateViewController(withIdentifier: "LoginNavController") as! UINavigationController
self.window?.rootViewController = loginNavController
self.window?.makeKeyAndVisible()
}
return true
}
为什么不在实际的根视图控制器上显示您的登录控制器?为什么不在实际的根视图控制器上显示您的登录控制器?不需要删除控制器,您可以直接调用
navigationController.SetViewController([viewController],动画:true)
。我现在所做的就是将“显示”设置为“以模态方式呈现”。这将从导航控制器中解除其余控制器的绑定!无需删除控制器,您只需直接调用navigationController.SetViewController([viewController],动画:true)
。我现在所做的就是将“Show”设置为“以模态方式呈现”“。这将解除其余控制器与导航控制器的绑定!