Как уволить 2 вида контроллера в Swift IOS?

Как уволить 2 вида контроллеров в Swift iOS?

Ниже мой код.

@IBAction func backButtonTapped(sender: AnyObject) {
    self.presentingViewController
        .presentingViewController
        .dismissViewControllerAnimated(true, completion: nil)
}

4 ответа

Версия Swift 3+. Вы можете отключить два контроллера представления одновременно в Swift 3 с этим кодом ниже.

func dismissTwoViews() {
    self.presentingViewController?
        .presentingViewController?.dismiss(animated: true, completion: nil)
}

Для этого есть специальный режим раскрутки, предназначенный для отката к определенному контроллеру представления в стеке.

Давайте назовем самый верхний контроллер (откуда вы идете) в качестве источника, а контроллер в стеке (который вы хотите откатить вверх) в качестве места назначения.

  1. Создайте IBAction в пункте назначения, который будет вызван на раскрутку:

    @IBAction func myUnwindAction(segue: UIStoryboardSegue) {}

это может быть пустым.

  1. в исходном контроллере создайте сценарий размотки, перетаскивая значок контроллера, чтобы выйти из него, он найдет действие, созданное вами на шаге 1. вызовите переход unwind,

  2. теперь вы можете выдавать эту тему из кода с регулярным

    performSegueWithIdentifier("unwind", sender: nil)

Я описал, как выдать раскрутку из кода. Для кнопок раскручивания сегменты можно создавать в IB напрямую, перетаскивая кнопку для выхода из иконки.

Также проверьте это обсуждение для получения дополнительной информации: Как выполнить сеанс Unwind программным способом?

Вы можете отклонить только один контроллер представления за один раз. Попробуй это

@IBAction func backButtonTapped(sender: AnyObject) {
        self.presentingViewController?.dismissViewControllerAnimated(true, completion: {
            let secondPresentingVC = self.presentingViewController?.presentingViewController;
            secondPresentingVC?.dismissViewControllerAnimated(true, completion: {});
        });
}

Свифт 4:

Создано расширение для UIViewController, которое может извлекать UIViewControllers в стек NavigationController в зависимости от предоставленного количества раз

extension UIViewController {

    func pop(numberOfTimes: Int) {
        guard let navigationController = navigationController else {
            return
        }
        let viewControllers = navigationController.viewControllers
        let index = numberOfTimes + 1
        if viewControllers.count >= index {
            navigationController.popToViewController(viewControllers[viewControllers.count - index], animated: true)
        }
    }
}
Другие вопросы по тегам