Swift 如何从UITabBarController将UINavigationController设置为根用户。?
我正在开发一个应用程序,在成功登录用户后,该应用程序会向用户显示登录信息。其中显示了4个选项卡,用于导航到各自的用途。 我必须使用,Swift 如何从UITabBarController将UINavigationController设置为根用户。?,swift,xcode,uinavigationcontroller,uitabbarcontroller,Swift,Xcode,Uinavigationcontroller,Uitabbarcontroller,我正在开发一个应用程序,在成功登录用户后,该应用程序会向用户显示登录信息。其中显示了4个选项卡,用于导航到各自的用途。 我必须使用,UIDABBARCONTROLLER用于仪表板的四个选项卡,使用UINavigationController用于LoginView的导航 当用户成功登录时,我将UITabBarController设置为navigationController。 每个视图都有一个注销按钮,单击该按钮,我必须将我的navigationcontroller设置回root 下面是我所做的代
UIDABBARCONTROLLER
用于仪表板的四个选项卡,使用UINavigationController
用于LoginView的导航
当用户成功登录时,我将UITabBarController设置为navigationController。
每个视图都有一个注销按钮,单击该按钮,我必须将我的navigationcontroller
设置回root
下面是我所做的代码示例
let dashboardViewObj = DashboardVC()
let registerViewObj = RegisterVC()
let alertViewObj = AlertVC()
let historyViewObj = HistoryVC()
override func viewDidLoad() {
super.viewDidLoad()
self.viewControllers = [dashboardViewObj, registerViewObj,historyViewObj,alertViewObj]
// Do any additional setup after loading the view.
dashboardViewObj.tabBarItem = UITabBarItem(tabBarSystemItem: .search, tag: 0)
registerViewObj.tabBarItem = UITabBarItem(tabBarSystemItem: .history, tag: 0)
historyViewObj.tabBarItem = UITabBarItem(tabBarSystemItem: .contacts, tag: 0)
alertViewObj.tabBarItem = UITabBarItem(tabBarSystemItem: .bookmarks, tag: 0)
}
您可以轻松使用“展开”序列,而不用设置根视图控制器或弹出视图控制器,甚至不用关闭方法!
请参见您可以轻松使用“展开”序列,而不用设置根视图控制器或弹出视图控制器,甚至不用关闭方法!
当您登录时,只需在注销按钮操作中输入此代码,它就会将您重定向到登录页面
var window: UIWindow?
let appDelegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate
let VC = self.appDelegate.storyboard1.instantiateViewController(withIdentifier: "Your controller name") as! loginViewController
self.appDelegate.navigationController = UINavigationController(rootViewController: VC)
self.appDelegate.navigationController?.navigationBar.isHidden = true
self.appDelegate.window?.rootViewController = self.appDelegate.navigationController
self.appDelegate.window?.makeKeyAndVisible()
它会工作。当您登录时,您只需将此代码放入您的注销按钮操作中,它就会将您重定向到登录页面
var window: UIWindow?
let appDelegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate
let VC = self.appDelegate.storyboard1.instantiateViewController(withIdentifier: "Your controller name") as! loginViewController
self.appDelegate.navigationController = UINavigationController(rootViewController: VC)
self.appDelegate.navigationController?.navigationBar.isHidden = true
self.appDelegate.window?.rootViewController = self.appDelegate.navigationController
self.appDelegate.window?.makeKeyAndVisible()
它会起作用的。@frzi:-非常感谢您在评论部分给出的答案和更正 我只是照你的建议做了。 在我的LoginViewController中更正了以下行
self.navigationController?.setViewControllers([tabbarObj], animated: true)
将行更新为
self.navigationController?.pushViewController(tabbarObj, animated: true)
在注销按钮操作中添加了一行
self.tabBarController?.navigationController?.popViewController(animated: true)
它成功了。。。
干杯,J.@frzi:-非常感谢评论部分的回答和更正 我只是照你的建议做了。 在我的LoginViewController中更正了以下行
self.navigationController?.setViewControllers([tabbarObj], animated: true)
将行更新为
self.navigationController?.pushViewController(tabbarObj, animated: true)
在注销按钮操作中添加了一行
self.tabBarController?.navigationController?.popViewController(animated: true)
它成功了。。。
Cheers J.如果每个ViewController都有自己的注销按钮,则该按钮的操作可能是:
self.tabBarController?.navigationController?.popViewController(动画:true)
。但理想情况下,您可以使用单独的对象(类)处理用户的登录状态,其他ViewController可能对此作出反应。@KishanBhatiya:-也尝试过了。但不起作用。无法导航回rootview@frzi:-在您发送此文件后,我对此感到厌倦,但我尝试的两种方法都不起作用,但没有崩溃,没有问题,也没有预期的输出。没有导航回根视图噢,我意识到当您单击您执行的登录按钮SetViewController([tabbarObj])
。这将使TabBarController成为NavigationController堆栈中唯一的ViewController。您可能希望按TabBarController而不是self.NavigationController?.pushViewController(tabbarObj,动画:true)
:)@frzi:-感谢您的更正,其工作正常。请您添加此评论以回答我的问题,以便我接受并投票表决,并且对其他人也很有用……如果每个ViewController都有自己的注销按钮,则该按钮的操作可能是:self.tabBarController?.navigationController?.popViewController(动画:true)
。但理想情况下,您可以使用单独的对象(类)处理用户的登录状态,其他ViewController可能对此作出反应。@KishanBhatiya:-也尝试过了。但不起作用。无法导航回rootview@frzi:-在您发送此文件后,我对此感到厌倦,但我尝试的两种方法都不起作用,但没有崩溃,没有问题,也没有预期的输出。没有导航回根视图噢,我意识到当您单击您执行的登录按钮SetViewController([tabbarObj])
。这将使TabBarController成为NavigationController堆栈中唯一的ViewController。您可能希望按TabBarController而不是self.NavigationController?.pushViewController(tabbarObj,动画:true)
:)@frzi:-谢谢你的更正,它的工作如预期。你能不能只添加这个评论来回答,这样我会接受它并投票,并且对其他人也会有用。。。