【Swift】NavigationControllerでpopかpushをいい感じにしてくれるカスタムfuncを作る方法
NavigationControllerで次に遷移するViewControllerのClassがViewControllerスタックの中に既に存在している場合はそこまでpopし、無ければpushする方法を書いていきます。
popかpushするカスタムfunc
以下をHelperクラスか何かに追加します。
1 2 3 4 5 6 7 8 9 10 11 |
extension UINavigationController { func popOrPushToViewController(ofKind kind: AnyClass, pushController: UIViewController, animated: Bool) { if let vc = viewControllers.last(where: { $0.isKind(of: kind)}) { popToViewController(vc, animated: animated) } else { pushViewController(pushController, animated: animated) } } } |
使い方はこんな感じです。
1 2 3 |
let className = String(describing: CustomViewController.self) let customVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: className) as! CustomViewController self.navigationController?.popOrPushToViewController(ofKind: CustomViewController.self, pushController: customVC, animated: true) |