GnohiSiaM
7/8/2017 - 3:28 PM

UINavigationController+Extension.swift

UINavigationController+Extension.swift


extension UINavigationController {
    
    // http://stackoverflow.com/questions/9906966/completion-handler-for-uinavigationcontroller-pushviewcontrolleranimated
    func pushViewController(viewController: UIViewController, animated: Bool, completion: (() -> Void)?) {
        pushViewController(viewController, animated: animated)
        
        if let coordinator = transitionCoordinator() where animated {
            coordinator.animateAlongsideTransition(nil) { _ in
                completion?()
            }
        } else {
            completion?()
        }
    }
    
    func setViewControllers(viewControllers: [UIViewController], animated: Bool, completion: (() -> Void)?) {
        setViewControllers(viewControllers, animated: animated)
        
        if let coordinator = transitionCoordinator() where animated {
            coordinator.animateAlongsideTransition(nil) { _ in
                completion?()
            }
        } else {
            completion?()
        }
    }
    
    func popViewControllerAnimated(animated: Bool, completion: (() -> Void)?) -> UIViewController? {
        let viewController = popViewControllerAnimated(animated)
        
        if let coordinator = transitionCoordinator() where animated {
            coordinator.animateAlongsideTransition(nil) { _ in
                completion?()
            }
        } else {
            completion?()
        }
        
        return viewController
    }
    
    func popToViewController(viewController: UIViewController, animated: Bool, completion: (() -> Void)?) -> [UIViewController]? {
        let viewControllers = popToViewController(viewController, animated: animated)
        
        if let coordinator = transitionCoordinator() where animated {
            coordinator.animateAlongsideTransition(nil) { _ in
                completion?()
            }
        } else {
            completion?()
        }
        
        return viewControllers
    }
    
    func popToRootViewControllerAnimated(animated: Bool, completion: (() -> Void)?) -> [UIViewController]? {
        let viewControllers = popToRootViewControllerAnimated(animated)
        
        if let coordinator = transitionCoordinator() where animated {
            coordinator.animateAlongsideTransition(nil) { _ in
                completion?()
            }
        } else {
            completion?()
        }
        
        return viewControllers
    }
    
}