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

RootViewController ==> FirstViewController ==> SecondViewController ==> ThirdViewController ==> FourthViewController (модально представлен с кнопкой) и все другие контроллеры, которые я подключил с помощью метода push. Моя задача - я хочу перейти к firstViewController из FourthViewController при нажатии кнопки. Любая помощь?

        for controller in self.navigationController!.viewControllers as Array {
        if controller.isKind(of: HomeViewController.self) {
            self.navigationController!.popToViewController(controller, animated: true)
            break
        }
    }

Это код, который я написал.

4
Wings 14 Мар 2018 в 18:00

2 ответа

Лучший ответ

Добавьте делегата в FourthViewController:

self.dismiss(animated: true) {
    self.delegate.popToFirstVC()
}

Добавьте func popToFirstVC() в ThirdViewController. Используйте popToViewController:

func popToFirstVC() {
    if let firstViewController = self.navigationController?.viewControllers[1] {
        self.navigationController?.popToViewController(firstViewController, animated: true)
    }
}

Или лучше

guard let viewControllers = self.navigationController?.viewControllers else {
    return
}

for firstViewController in viewControllers {
    if firstViewController is FirstViewController {
        self.navigationController?.popToViewController(firstViewController, animated: true)
        break
    }
}

Есть еще такой вариант. Добавьте наблюдателя для этой функции и при необходимости вызовите. Но я бы сделал это только в самых крайних случаях.

func popToThisVC() {
    if let topController = UIApplication.topViewController() {
        topController.navigationController?.popToViewController(self, animated: true)
    }
}
3
maxwell 16 Мар 2018 в 10:11

Вы упомянули connected, поэтому я считаю, что вы использовали раскадровки и переходы, в таком случае почему бы не создать раскручивающий переход? Немного сложно показать вам фрагмент перехода от раскрутки здесь только с помощью текста, но я думаю Размотать блог с медиума, есть ваш ответ

0
Happiehappie 14 Мар 2018 в 17:09