Может быть лучше использовать «раскрутить»:
https://developer.apple.com/library/archive/featuredarticles/ViewControllerPGforiPhoneOS/UsingSegues.html#//apple_ref/doc/uid/TP40007457-CH15-SW8
https://developer.apple.com/library/archive/technotes/tn2298/_index.html
Позволяет одновременно отключать несколько контроллеров представления без необходимости знать, сколько их в стеке. И без того, чтобы представленный контроллер представления обладал специальными знаниями о том, куда он должен вернуться обратно (т.е. вам не нужно напрямую обращаться к корневому контроллеру представления окна).
Допустим, у вас есть некоторый контроллер корневого представления, называемый VC1, первый модальный - VC2, а второй модальный - VC3.
В VC1 вы бы реализовали IBAction
, называемый (например) unwindToRoot
. Затем в раскадровке для VC3 вы подключаете кнопку «Готово» к объекту Exit
и выбираете действие unwindToRoot
.
Когда эта кнопка нажата, система отключит все контроллеры представления, необходимые для возврата вас к VC1.
Таким образом, в основном вы просто позволяете всем этим VC складываться, а когда вы все закончите, вы отбрасываете все, чтобы вернуться к корневому VC.