【问题标题】:Dissmiss from UITabBarController从 UITabBarController 中解散
【发布时间】:2017-08-03 12:42:30
【问题描述】:

我猜它可以被复制,但我到处寻找并没有找到适合我的解决方案。

那么关于我的问题。我有这样的东西 open this image to see more

在我的 AppDelegate 中我有 func

func logIn() {

    let userExist = UserDefaults.standard.string(forKey: "auth_key_user")
    if userExist != nil && userExist != "" {
        let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let whereToGo = storyboard.instantiateViewController(withIdentifier: "AllPostsOfUserTabBarController") as! AllPostsOfUserTabBarController
        window?.rootViewController = whereToGo
    }
}

如果用户存在,它会引导我进入标签栏控制器内的第一个视图控制器。那里有导航按钮,带有注销操作。 我需要注销(将数据发送到服务器),然后使用文本字段和按钮转到我的第一个视图控制器,我可以再次登录。

我需要如何实现它?

【问题讨论】:

  • 使用上述代码有什么问题吗?

标签: ios swift uitabbarcontroller appdelegate


【解决方案1】:

注销后试试这个代码-

DispatchQueue.main.sync() {
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let loginVC = storyboard.instantiateInitialViewController()
    appDelegate.window?.rootViewController = loginVC
}

希望对你有帮助!

【讨论】:

  • 我认为它只是说应该是哪个控制器的首字母,而不是打开它。
  • 是的,我试过了。我相信它会保留在 UITabBarController 中,因为它显示来自 UITabBarController 中 viewWillAppear 的打印
  • 我的错。它有效,它只是我,笨蛋。我忘记从 AppDelegate 切换 func。我不仅尝试连接到 UITabBarController,还尝试连接到 UINavigationController,看看发生了什么。谢谢你的回答。
【解决方案2】:

将此代码放在注销按钮的功能中。它会让你回到你的根控制器。

func logoutBtnClicked()
{
   DispatchQueue.main.sync()
   {
    (send your data to server)

    self.navigationController?.popToRootViewController(animated: true)
   }
}

【讨论】:

    【解决方案3】:

    在 appdelegate 中试试这个

    登录时

        self.window?.rootViewController = whereToGo
    

    退出时

     func setupLoginViewController() {
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let loginVC: UIViewController? = storyboard.instantiateViewController(withIdentifier: "loginVCID") as? UIViewController
           let navController: UINavigationController? = UINavigationController(rootViewController: loginVC!) as UINavigationController
    
            window?.rootViewController = navController
        }
    

    【讨论】:

    • “Constant.StoryBoard...”是什么意思?
    • 对不起,我忘了说它是故事板对象。
    • @Abhishek Jain 给出了答案。您的代码也可以正常工作,但是在返回初始视图控制器并按下按钮后,什么也没发生。我的代码如下所示:@IBAction func transferData(_ sender: Any) { let myVC = self.storyboard?.instantiateViewController(withIdentifier: "TabBarController") as! TabBarController myVC.textInputTB = textField.text! self.navigationController?.pushViewController(myVC, animated: true) }
    • 如果您将导航控制器用作根视图控制器,它将起作用。
    • 我明白了!谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多