如何在Swift iOS中关闭两个视图控制器?
以下是我的代码。
@IBAction func backButtonTapped(sender: AnyObject) {
self.presentingViewController
.presentingViewController
.dismissViewControllerAnimated(true, completion: nil)
}
如何在Swift iOS中关闭两个视图控制器?
以下是我的代码。
@IBAction func backButtonTapped(sender: AnyObject) {
self.presentingViewController
.presentingViewController
.dismissViewControllerAnimated(true, completion: nil)
}
Swift 3+版本。您可以使用以下代码在Swift 3中同时关闭两个视图控制器。
func dismissTwoViews() {
self.presentingViewController?
.presentingViewController?.dismiss(animated: true, completion: nil)
}
Swift 4+版本。只需使用此扩展即可弹出特定的视图控制器。
extension UINavigationController {
func popToViewController(ofClass: AnyClass, animated: Bool = true) {
if let vc = viewControllers.filter({$0.isKind(of: ofClass)}).last {
popToViewController(vc, animated: animated)
}
}
func popViewControllers(viewsToPop: Int, animated: Bool = true) {
if viewControllers.count > viewsToPop {
let vc = viewControllers[viewControllers.count - viewsToPop - 1]
popToViewController(vc, animated: animated)
}
}
}
在您的视图控制器类中使用如下方式
for controller in self.navigationController!.viewControllers as
Array {
if controller.isKind(of:
yourPopControllerName.self) {
self.navigationController?.isNavigationBarHidden = false
_ =
self.navigationController!.popToViewController(controller,
animated: false)
break
}
}
有一个特殊的返回segue,它旨在回滚到堆栈中的某个视图控制器。
让我们将最顶层的控制器(从哪里开始)称为源,将堆栈中要回滚到顶部的控制器称为目标。
在目标中创建IBAction
以在返回segue上触发:
@IBAction func myUnwindAction(segue: UIStoryboardSegue) {}
它可以是空的。
在源控制器中,通过从控制器图标拖动到退出一个图标来创建一个返回segue,它会找到您在步骤1中创建的操作。将segue命名为unwind
。
现在,您可以使用常规代码发出该segue
performSegueWithIdentifier("unwind", sender: nil)
我描述了如何从代码中发出返回segue。对于按钮,可以直接在IB中通过将按钮拖动到退出图标来创建返回segue。
还可以查看这个讨论以获取更多信息:如何在编程中执行Unwind segue?
@IBAction func backButtonTapped(sender: AnyObject) {
self.presentingViewController?.dismissViewControllerAnimated(true, completion: {
let secondPresentingVC = self.presentingViewController?.presentingViewController;
secondPresentingVC?.dismissViewControllerAnimated(true, completion: {});
});
}
Swift 4:
创建了一个扩展功能,用于UIViewController,可以根据提供的次数弹出NavigationController堆栈中的UIViewControllers。
extension UIViewController {
func pop(numberOfTimes: Int) {
guard let navigationController = navigationController else {
return
}
let viewControllers = navigationController.viewControllers
let index = numberOfTimes + 1
if viewControllers.count >= index {
navigationController.popToViewController(viewControllers[viewControllers.count - index], animated: true)
}
}
}
pop(numberOfTimes)
在可读性方面有些误导人。那么 pop(numberOfViewControllers: Int)
怎么样? - Jojo Narte