我有一个仪表板,然后有一个登录屏幕和个人资料屏幕。进入个人资料屏幕后,我希望删除登录屏幕,以便当我按“后退”按钮时,将被带到仪表板而不是登录名。这些都是导航视图控制器的视图控制器,我使用当前方法显示tge。
我有一个问题,在使用导航过程中,登录可以出现在任何地方。示例:仪表板,屏幕2,屏幕3,登录名,配置文件。在这里,我必须删除登录名,并且当用户从个人资料中点击时,它应该显示屏幕3。
答案 0 :(得分:0)
如果您已经登录并且必须移至top viewController,则可以执行
window.rootViewController.dismiss(animated: true, completion: nil)
但是,如果您使用的是NavigationController,那么它将起作用:
navigationController.popToRootViewController(animated: true)
答案 1 :(得分:0)
在登录视图控制器中执行以下操作:
override func viewWillDisappear(_ animated: Bool) {
var navigationArray = navigationController?.viewControllers
let count = navigationArray?.count
navigationArray?.remove(at: count! - 2)
navigationController?.viewControllers = navigationArray!
}
这将在即将消失时从导航堆栈中删除当前的视图控制器(在您的情况下为登录VC)。因此,当您从下一个VC点击后退按钮时,它将始终带您进入登录前的VC。
答案 2 :(得分:0)
这是通用答案,不仅用于此问题的答案。
弹出时,您可以从导航控制器中踢出viewControllers,可以解决您的问题
extension UINavigationController {
public func removeViewController(classes : [String]) {
var vcs = [UIViewControllers]()
for viewController in self.viewControllers {
let name = viewController.className
if !classes.contains(name) {
vcs.append(viewController)
}
}
if classes.count < vcs.count {
self.viewControllers = vcs
}
}
}
现在认为您有3个viewControllers,仪表板,登录名,配置文件。您要删除登录名并从个人资料移回仪表板
在个人资料的视图控制器中
override func viewDidLoad() {
super.viewDidLoad()
//your works
let viewControllersToRemove = [String(describing: type(of:login))]
navigationController.removeViewController(classes : viewControllersToRemove)
}