Как отменить все нажимаемые и представленные экраны одним нажатием кнопки - PullRequest
1 голос
/ 24 апреля 2019

У меня есть 3 Viewcontrollers HomePageController, ChangePasswordViewController, PasswordChangedDoneController

в действии кнопки смены пароля на главной странице. Я нажимаю на экран в ChangePasswordViewController.

let vc = self.storyboard?.instantiateViewController(withIdentifier: "ChangePasswordViewController")as! ChangePasswordViewController
self.navigationController?.pushViewController(vc, animated: true)

Теперь яв настоящее время экран ChangePasswordViewController до PasswordChangedDoneController.

let vc = self.storyboard?.instantiateViewController(withIdentifier: "PasswordChangedController")as! PasswordChangedDoneController
self.navigationController?.present(vc, animated: true, completion: nil)

теперь я хочу перейти к HomePageController с действием кнопки Gotit внутри PasswordChangedDoneController.Здесь я хочу удалить одновременно толчок и подарок одним действием.

1 Ответ

0 голосов
/ 24 апреля 2019

Вы можете использовать эту функцию для перехода к типу класса данного контроллера

extension UIViewController {

    /// like UIViewController.popToRoot
    public func popToRoot() {
        guard let navigationController = navigationController else { return  dismiss(animated: true) }
        navigationController.popToRootViewController(animated: true)
    }

    /// like UIViewController.popTo(:)
    public func popTo(_ vc: UIViewController.Type, _ orPopToRoot: Bool = true) {
        guard let navigationController = navigationController else { return popToRoot() }
        let list = navigationController.viewControllers.reversed().filter { return $0.isKind(of: vc) }
        guard let c = list.first else {
            if orPopToRoot { self.popToRoot() }
            else { self.popSelf(animated: true) }
            return
        }
        navigationController.popToViewController(c, animated: true)
    }

    /// like UIViewController.popViewController
    ///
    /// - Note: if can't found navigationController. will 'dismiss(animated:completion:)'
    public func popSelf(animated: Bool) {
        guard let navigationController = navigationController else { return  dismissSelf(animated: animated) }
        navigationController.popViewController(animated: animated)
    }

    /// like UIViewController.dismiss
    public func dismissSelf(animated: Bool, completion: (() -> Void)? = nil) {
        dismiss(animated: animated, completion: completion)
    }
}

:)

...