Swift之捕捉侧滑返回事件并跳转指定控制器

捕捉侧滑返回事件

在当前控制器中重写如下两个方法便可:web

// OC
- (void)willMoveToParentViewController:(nullable UIViewController *)parent NS_AVAILABLE_IOS(5_0);
- (void)didMoveToParentViewController:(nullable UIViewController *)parent NS_AVAILABLE_IOS(5_0);

	// Swift
	override func willMove(toParent parent: UIViewController?) {
        super.willMove(toParent: parent)
    }

	override func didMove(toParent parent: UIViewController?) {
        super.didMove(toParent: parent)
    }
  • 第一次push进来的时候两个方法都会调用,parent的值不为空。
  • 当开始使用系统侧滑的时候,会先调用willMove,而parent的值为空。
  • 当滑动结束后返回了上个页面,则会调用didMove,parent的值也为空,若是滑动结束没有返回上个页面,也就是轻轻划了一下还在当前页面,那么则不会调用didMove方法。
  • 想要在侧滑返回后在上个页面作一些操做的话,能够在didMove方法中根据parent的值来判断。

跳转指定控制器

if (!parent) {
     	var tmp = NSMutableArray(array: self.navigationController!.viewControllers) as! [UIViewController]
        var minIndex: Int = 0
        for (index, vc) in tmp.enumerated() {
             if vc.isKind(of: SafeCenterViewController.self) {
                  minIndex = index + 1
                  break
              }
        }
        if minIndex != 0 {
             tmp.removeSubrange((minIndex)..<(tmp.count - 1))
                 self.navigationController?.viewControllers = tmp
        }
    }
let popVC = self.navigationController?.viewControllers[2]
    self.navigationController?.popToViewController(popVC!, animated: true)