弹出一个ViewController后如何判断栈顶的ViewController是不是特定的?
How to check after popping a ViewController, the ViewController on top of the stack, is a particular one?
假设我目前在 BaseViewController
。我可以从其他 2 个视图控制器(比如 A 和 B)接近这个视图控制器 class。所以当我弹出 BaseViewController
时,如何检查堆栈顶部是否存在 A 或 B?下面是我的代码(在 BaseViewController
内):
func goToAOrBViewController {
// If after popping viewController is A do this
navigationController.popViewController(animated: true)
// Id after popping viewController is B do this
// Instantiate B and push it
}
有很多方法可以做到这一点
第一种也是最简单的方法
func visibleViewController() -> UIViewController? {
let appDelegate = UIApplication.shared.delegate
if let window = appDelegate!.window {
return window?.visibleViewController
}
return nil
}
func goToAOrBViewController {
// If after popping viewController is A do this
navigationController.popViewController(animated: true)
if visibleViewController() == viewControllerA{
//Do stuff for A
}else{
//Do stuff for B
}
}
第二种明显的方法
let topController = UIApplication.sharedApplication().keyWindow?.rootViewController
if topController == viewControllerA {
//Do stuff for A
}else{
//Do stuff for B
}
您可以同时弹出和推送视图控制器。
未测试:
navigationController?.viewControllers.removeLast()
let topVC = navigationController?.viewControllers.last
if topVC == A {
navigationController?.viewControllers.append(A)
navigationController?.setViewControllers(A, animated: false)
} else {
navigationController?.viewControllers.append(B)
navigationController?.setViewControllers(B, animated: false)
}
里面 BaseViewController
class:
func goToAOrBViewController() {
guard let navigationController = self.navigationController else { return }
navigationController.popViewController(animated: false)
guard let viewController = navigationController.topViewController else { return }
if viewController is ViewControllerA {
// Do something for A
} else if viewController is ViewControllerB {
// Do Something for B
}
// You need not put else-if case if you are sure BaseVC is reachable from A and B only (just use else)
}
假设我目前在 BaseViewController
。我可以从其他 2 个视图控制器(比如 A 和 B)接近这个视图控制器 class。所以当我弹出 BaseViewController
时,如何检查堆栈顶部是否存在 A 或 B?下面是我的代码(在 BaseViewController
内):
func goToAOrBViewController {
// If after popping viewController is A do this
navigationController.popViewController(animated: true)
// Id after popping viewController is B do this
// Instantiate B and push it
}
有很多方法可以做到这一点
第一种也是最简单的方法
func visibleViewController() -> UIViewController? {
let appDelegate = UIApplication.shared.delegate
if let window = appDelegate!.window {
return window?.visibleViewController
}
return nil
}
func goToAOrBViewController {
// If after popping viewController is A do this
navigationController.popViewController(animated: true)
if visibleViewController() == viewControllerA{
//Do stuff for A
}else{
//Do stuff for B
}
}
第二种明显的方法
let topController = UIApplication.sharedApplication().keyWindow?.rootViewController
if topController == viewControllerA {
//Do stuff for A
}else{
//Do stuff for B
}
您可以同时弹出和推送视图控制器。
未测试:
navigationController?.viewControllers.removeLast()
let topVC = navigationController?.viewControllers.last
if topVC == A {
navigationController?.viewControllers.append(A)
navigationController?.setViewControllers(A, animated: false)
} else {
navigationController?.viewControllers.append(B)
navigationController?.setViewControllers(B, animated: false)
}
里面 BaseViewController
class:
func goToAOrBViewController() {
guard let navigationController = self.navigationController else { return }
navigationController.popViewController(animated: false)
guard let viewController = navigationController.topViewController else { return }
if viewController is ViewControllerA {
// Do something for A
} else if viewController is ViewControllerB {
// Do Something for B
}
// You need not put else-if case if you are sure BaseVC is reachable from A and B only (just use else)
}