从 UITabBarController 中解散

Posted

技术标签:

【中文标题】从 UITabBarController 中解散【英文标题】:Dissmiss from 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
    

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

我需要如何实现它?

【问题讨论】:

使用上述代码有什么问题吗? 【参考方案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) 如果您将导航控制器用作根视图控制器,它将起作用。 我明白了!谢谢。

以上是关于从 UITabBarController 中解散的主要内容,如果未能解决你的问题,请参考以下文章

如何从 push segue 中解散带有情节提要的 viewController?

如何从已解散的导航控制器中的文本视图中捕获最终值

pivot_wider 解散排列

如何使用 cmake 设置 g++ 的标志,以便 gprof 可以解散?

程序在调试模式下崩溃:“无法解散”?

解散 UIImagePickerController 会破坏父布局