出现后无法关闭视图控制器
Posted
技术标签:
【中文标题】出现后无法关闭视图控制器【英文标题】:Cant dismiss view controller after present it 【发布时间】:2018-09-13 03:05:38 【问题描述】:呈现标签栏控制器后,我无法关闭标签栏控制器。 在不删除应用程序的情况下重新安装后,我什至无法点击我的按钮。需要卸载并重新安装应用程序,然后我才能点击按钮
我已经尝试了一些其他方式来关闭标签栏控制器,但仍然无法关闭控制器。
这是我目前在登录后展示控制器的方式
let storyboard = UIStoryboard.init(name: "Main", bundle: Bundle.main)
let loginVC = storyboard.instantiateViewController(withIdentifier: "Home")
self.present(loginVC, animated: true, completion: nil)
这是我目前关闭控制器的方式
@IBAction func btnLogout_TouchUpInside(_ sender: Any)
dismiss(animated: true, completion: nil)
这是我的根视图
let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
if defaults.bool(forKey: "isLoggedIn")
// Show Home screen
window?.rootViewController = storyboard.instantiateViewController(withIdentifier: "Home")
else
// Show Login screen
window?.rootViewController = storyboard.instantiateViewController(withIdentifier: "Login")
window?.makeKeyAndVisible()
【问题讨论】:
您的代码没有明显的问题。然而,它也并不完全清楚。我们不需要查看 cookie 和钥匙串的东西,因为它们不相关。我们确实需要知道您在何时何地运行代码来加载登录。注销在哪个屏幕上?我之前在 Code 中看到过类似的问题,它使用多个 UIWindow 实例并错误管理它们,所以我还要问你是否正在做类似的事情,或者可能切换根视图控制器。 它可能是我的 rootview 控制器吗?我确实在 AppDelegate 中做了一些检查。如果有用户立即显示标签栏控制器,否则显示登录视图控制器 【参考方案1】:尝试关闭所有可能对您有用的控制器
DispatchQueue.main.async
self.view.window!.rootViewController?.dismiss(animated: true, completion:
print("All controller dismissed successfully..")
)
【讨论】:
之前试过这个代码。它仅在第一次登录时有效,我可以注销。如果有现有的登录用户并显示主屏幕。我无法点击注销按钮 @HanafiHisyam 如果您的控制器出现,那么这段代码应该可以工作,因为它正在关闭窗口的所有控制器,您现在应该再次尝试这段代码。【参考方案2】:试试这个
self.presentingViewController?.dismiss(animated: true, completion: nil)
【讨论】:
【参考方案3】:嗯。尽管我仍然不确定发生了什么,但您的更新会有所帮助。我的猜测是您将登录设置为 root,然后显示主页。但我不确定你在哪里或试图解雇什么。如果它在登录中,则没有什么可以关闭的,因为它是根视图控制器。
我的建议是重新配置故事板。因为您手动呈现视图控制器,所以我将假设情节提要不包含控制器之间的任何 segue。我建议添加 segues 并使用它们。
我将主视图控制器设置为初始视图控制器,并将主故事板设置为要在应用程序设置中加载的故事板。然后可以删除所有加载情节提要和设置根视图控制器的代码。
接下来我会从主视图控制器到登录视图控制器进行手动模态segue。然后在主视图控制器的 viewDidAppear 中,我将添加代码来决定是否需要登录,并对他们执行登录 segue。
然后在登录视图控制器中,您可以执行关闭操作,它将删除模型登录视图。
这只是执行此操作的众多方法之一,但它几乎是最简单的方法。您不需要任何代码来加载或设置根视图控制器或其他任何东西。它只是让故事板为您完成工作。
【讨论】:
以上是关于出现后无法关闭视图控制器的主要内容,如果未能解决你的问题,请参考以下文章