Двойной возврат к предыдущему виду - Swift - PullRequest
0 голосов
/ 11 декабря 2018

Я новичок в IOS и Swift, поэтому не судите, простое ли решение.

У меня есть три ViewControllers, такие как A, B и C.

Я начал с A -> NavigationController -> B -> NavigationController -> C

В конкретной ситуации мне нужно вернуться из C в A, не видя B. Есть ли способ сделать это?

Может быть, изменить родительский навигационный контроллер?Может быть, я могу распечатать стек с каждым текущим представлением?- это будет действительно полезно.Я пытался отменить просмотр C и B один за другим, и это сработало, но затем мы можем на мгновение увидеть представление B - так что это не решение для меня.Ps: я использую модальный вид для переключения между контроллерами.

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Есть 2 способа добиться этого.Простота реализации в View Controller C, вы можете, в определенной ситуации, вызывать следующую функцию:

navigationController?.popToRootViewController(animated: true)

Это вызовет всю иерархию навигационных представлений и вернет вас к корню, то есть к первому представлению.controller.

Второй подход - определить метод размотки в контроллере представления, к которому вы хотите вернуться.В контроллере представления, когда вы начнете вводить раскрутку, в Xcode 10 вы получите автозаполнение, чтобы добавить этот метод быстрого перемотки.

@IBAction func unwindToA(_ unwindSegue: UIStoryboardSegue) {
    let sourceViewController = unwindSegue.source
    // Use data from the view controller which initiated the unwind segue
}

В этом конкретном вопросе, скажем, вы добавили этот метод в View Controller A, так как выхочу вернуться к этому.Я предполагаю, что у вас есть кнопка на View Controller C, чтобы вернуться к A. Controll + Перетащите с кнопки на символ Exit контроллера представления A. Автоматически появится метод unwindToA.Подключитесь к нему, и все готово.Когда пользователь нажимает эту кнопку, он возвращает 2 навигационных контроллера к A.

Примечание. С помощью этого метода вы можете вернуться к любому навигационному контроллеру в стеке навигации, и он не ограничен одним только корневым контроллером представления.Ниже приведена дополнительная картинка, показывающая выход на контроллере вида.Exit on a View Controller

0 голосов
/ 11 декабря 2018

Если A всегда первый контроллер представления, вы можете просто сделать:

viewcontrollerC.navigationController?.popToRootViewController(animated: true)

Эти методы извлекают стек на первый контроллер представления, не отображая промежуточные единицы

ЕслиA не первый viewController, вы можете сделать:

viewcontrollerC.navigationController ?.popToViewController (viewControllerA, animated: true)

Если у вас нет ссылки на viewControllerA, найдите ее в стеке:

let viewControllerA: UIViewController? 

for (let vc in (self.navigationController?.viewControllers ?? [])) {
     //adust the test to find the appropriate controller
    if vc.isKindOf(ViewControllerAClass.self) {
          viewControllerA = vc
          break  
    }
}

if let viewControllerA = viewControllerA {
    self.navigationController?.popToViewController(viewControllerA, animated: true)
}

источник: https://developer.apple.com/documentation/uikit/uinavigationcontroller/1621871-poptoviewcontroller

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...