Я унаследовал проблему с контроллером навигации в существующем приложении, которое я пытаюсь решить чисто.
Это приложение имеет несколько раскадровок и несколько контроллеров UINavigationController.В одном месте приложения серия контроллеров представления представлена модально с использованием отдельной раскадровки и отдельного контроллера навигации.Когда модальный процесс завершен, навигационная иерархия выглядит примерно так:
NavController1 -> VC1 [Sesent Modally 'segue] -> NavController2 -> VC2 -> VC3 -> VC4
Когда пользователь завершает модальное действие в VC4, dismiss ()вызывается программно на VC4, и пользователь может затем вернуться к VC1 с помощью кнопки «назад».
Однако нам действительно нужно «вытолкнуть» весь модально представленный набор контроллеров представления (и ихконтроллер Nav), когда пользователь заканчивает модальное действие.Проблема в том, что из VC3 или VC4 я не могу вызвать popToRootViewController ().Я также не могу пройтись по стеку VC, чтобы найти VC1, поскольку текущий контроллер Nav не управляет им.
На ум приходит пара решений:
1) использовать диспетчер уведомленийи пусть VC1 прислушается к сообщению, чтобы вернуть все обратно себе
2) передать ссылку на VC1 в качестве делегата по всей цепочке, чтобы VC3 или 4 могли получить от него все
Оба эти решения следуют общему принципу, что презентующий ВК должен быть тем, который отклоняет, но я не считаю то, что я считаю чистым.
Я бы приветствовал любые мысли или альтернативные решения.