Очевидно, как многие говорили, это в мире учебников было бы/должно быть ситуацией делегата. Где A
представляет B
и B
представляет C
. Затем, когда сделано C
, он сообщает B
, который отклоняет C
, а затем B
сообщает A
об увольнении B
.
Я бы сказал, что вы по существу создаете набор модально представленных контроллеров представлений, которые составляют стек навигации. Я бы, скорее всего, реализовал его как таковой. Где A
будет контроллером корневого представления. A
затем надавите на стек B
, и B
будет толкать C
в стек. Когда было выполнено C
, это могло бы быть просто popToRootViewControllerAnimated:
или popToViewController:A animated:YES
, если A
не был rootViewController.
также удаляет B
из-под C
выглядит проблематичным.Но это не похоже, что высечено в камне на основе вашего комментария:
Но в любом случае его не конец света, если я держу, что ViewController там на некоторое время. -
Это позволит хотя бы включить достаточно чистую настройку делегата.
По-прежнему кажется, что вы в основном знаете, что, когда пользователь закончил работу с C
, им больше не понадобится B
. Если это так, вы можете вслепую увольнять сразу два или более диспетчеров. И код для двоих одновременно довольно прост. (при условии, что версия iOS> 5.0)
[self.presentingViewController.presentingViewController dismissModalViewControllerAnimated:YES];
Обратите внимание, что я сказал слепо! Этот код не прощает и делает предположения. Например, наиболее очевидно, что контроллер вида имеет на самом деле presentingViewController
и что этот контроллер представления имеет номер presentingViewController
. Если любой из этих критериев не будет выполнен, этот код сделает ничего. Это может легко произойти, если вы в любой момент перестроете свое приложение.
Итак, если вы решите использовать эту строку кода, используйте ее очень осторожно. И, пожалуйста, рассмотрите возможность использования UINavigationController
для этой иерархии представлений или, по крайней мере, для делегирования.
Не совсем. Если родительский контроллер представления недействителен, то есть его дети - вам нужно переделать концепцию UX вместо этого. –
Хм, может быть. Но в любом случае это не конец света, если я буду держать этот viewController там какое-то время. –
Вы можете получить ссылку на vc A из контроллера B (presentingViewController) и предоставить ему C и одновременно отпустить B. – rdelmar