UINavigationController popToViewController не появляется - PullRequest
0 голосов
/ 20 сентября 2019

Работаю с UIKit уже много лет.Удивительно, как подобные проблемы появляются неожиданно.

У меня есть простая настройка навигации:

  • UINavigationController
    • HomeViewController[push]
    • DetailViewController [push]
    • ModalViewController [модальный]

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

По какой-то причине следующий фрагмент кода не работает должным образом:

extension UINavigationController {

  func popToViewController(_ vc: UIViewController, animated: Bool, completion: @escaping ([UIViewController]?)->()) {

    let popped = popToViewController(viewController, animated: animated)

    if let coordinator = self.transitionCoordinator {
      coordinator.animate(alongsideTransition: nil) { _ in
        completion(popped)
      }
    }
    else {
      completion(popped)
    }

  }

}

с использованием расширения:

navigationController.popToViewController(
  homeViewController, 
  animated: true
)

Нет ошибок, предупреждений или сбоев.Пользовательский интерфейс все еще полностью отзывчив. Но DetailViewController в стеке никогда не появляется.Проверка переменной popped расширения приводит к появлению пустого массива, что имеет смысл, поскольку DetailViewController явно не удаляется из стека.

Что может помешать навигационному контроллеру вытолкнуть с него действительный vcстек?

Вещи, которые я проверял:

  • homeViewController уже в стеке , и я спрашиваю эточтобы заглянуть в тот же экземпляр.т.е. navigationController.viewControllers.contains(homeViewController) == true
  • Я в главной теме.т. е. Thread.isMainThread == true
  • navigationController.viewControllers возвращает один и тот же массив до и после вызова popToViewController(_vc:animated:)
  • Вручную выяснить, какие vc-файлы нужно получить, и вызвать setViewControllers(_ vcs:animated:) с помощью vcs, который я хочусохранить (в данном случае только экземпляр HomeViewController).Это все еще имеет ту же проблему.

Я хочу сказать, что это как-то связано с выталкиванием контроллеров представления из стека из-за модальной презентации.Но, насколько я знаю, это нормально.Кроме того, я делал это раньше, и у меня не было проблем в прошлом.

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