从 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?