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
}
}