Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何从UITabBarController将UINavigationController设置为根用户。?_Swift_Xcode_Uinavigationcontroller_Uitabbarcontroller - Fatal编程技术网

Swift 如何从UITabBarController将UINavigationController设置为根用户。?

Swift 如何从UITabBarController将UINavigationController设置为根用户。?,swift,xcode,uinavigationcontroller,uitabbarcontroller,Swift,Xcode,Uinavigationcontroller,Uitabbarcontroller,我正在开发一个应用程序,在成功登录用户后,该应用程序会向用户显示登录信息。其中显示了4个选项卡,用于导航到各自的用途。 我必须使用,UIDABBARCONTROLLER用于仪表板的四个选项卡,使用UINavigationController用于LoginView的导航 当用户成功登录时,我将UITabBarController设置为navigationController。 每个视图都有一个注销按钮,单击该按钮,我必须将我的navigationcontroller设置回root 下面是我所做的代

我正在开发一个应用程序,在成功登录用户后,该应用程序会向用户显示登录信息。其中显示了4个选项卡,用于导航到各自的用途。 我必须使用,
UIDABBARCONTROLLER
用于仪表板的四个选项卡,使用
UINavigationController
用于LoginView的导航

当用户成功登录时,我将UITabBarController设置为navigationController。 每个视图都有一个注销按钮,单击该按钮,我必须将我的
navigationcontroller
设置回root

下面是我所做的代码示例

  • 我的阿巴斯控制器

    类TabBarVC:UITabBarController{

    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)
    }
    
  • 在我的登录视图中

  • 设tabbarObj=TabBarVC()

    现在,在这些视图中单击注销按钮时,我需要将navigationController设置为root。 怎么做

    下面的图表将有助于了解我需要什么。 任何帮助都会受到欢迎


    您可以轻松使用“展开”序列,而不用设置根视图控制器或弹出视图控制器,甚至不用关闭方法!

    请参见

    您可以轻松使用“展开”序列,而不用设置根视图控制器或弹出视图控制器,甚至不用关闭方法!

    当您登录时,只需在注销按钮操作中输入此代码,它就会将您重定向到登录页面

       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:-谢谢你的更正,它的工作如预期。你能不能只添加这个评论来回答,这样我会接受它并投票,并且对其他人也会有用。。。