Еще один способ - скрыть любые контроллеры представлений, которые вы сверляете как локальные переменные класса, - тогда в viewWillAppear вы знаете, что вас ударили из-за разворота, если какая-либо из локальных переменных класса по-прежнему установлена. Вы даже знаете, с какого контроллера возвращается пользователь, поэтому вы можете выполнять другую логику (например, выбор из измененных значений из контроллеров представления, которые вы развернули).
Не забудьте выпустить и проигнорировать ссылки в viewWillAppear, чтобы система была сброшена, чтобы снова распознать вещи.
Мне нравится этот механизм больше, чем диспетчеры сверления, которые знают о главном представлении, как делегата, чтобы вытеснять изменения, так как часто они работают над некоторыми отдельными небольшими частями данных и не должны знать о весь контроллер главного представления. Это облегчает их повторное использование, так как они могут быть вызваны разными классами.
Я тоже борюсь с этим. Я надеялся создать класс-помощник и сделать его своим «стек» UINavigationControllerDelegate, а затем посмотрев через «navigationController: willShowViewController:», но есть две проблемы: 1), кажется, вызывается даже тогда, когда его не нажимают (например, табуляция по этому стеклу - что кажется подозрительным), и 2) это называется ПОСЛЕ того, что связано с контроллером viewWillAppear, что вызывает логические проблемы для меня, так как мне нужно знать, находится ли я в том же стеке до появления представления. Я просто указываю на это, потому что этот подход казался элегантным, но был тупиком. –