Документировано ли где-нибудь взаимодействие между представленными / представленными контроллерами представления и родительскими / дочерними контроллерами представления?
Читая документацию об изменениях UIViewControllers в iOS, я попытался выяснить, как взаимодействие между представлениями модальных контроллеров представления работает внутри пользовательского контроллера представления контейнера. В конечном счете, я хотел бы иметь возможность пройтись по цепочке представленных контроллеров представления, даже если некоторые из этих контроллеров представлены дочерними контроллерами представления.
(Я работаю над библиотекой, а не над приложением, поэтому я не создаю иерархии, с которыми я буду взаимодействовать. Я просто пытаюсь убедиться, что моя библиотека будет работать правильно в различных типах иерархий.)
Поэтому мой вопрос сводится к тому, что происходит, когда кто-то пытается представить контроллер представления из дочернего контроллера представления?
[childViewController presentViewController:viewController animated:YES completion:nil];
Так как представленный контроллер представления предназначен для "захвата" взаимодействия до тех пор, пока он не будет отклонен, для меня будет иметь смысл, что запрос презентации будет перенаправлен его родителю (или фактически вверх по цепочке parentViewControllers, пока не достигнет контроллера представления с нет parentViewController), а затем будет отображаться из этого контроллера представления. В противном случае кажется, что разработчик мог бы делать такие вещи, как представить контроллеры модального представления от двух разных потомков и т. Д., Что мне кажется проблематичным. (Какой представленный контроллер представления будет иметь приоритет, например?).
Кроме того, если бы вышеизложенное было правдой, похоже, это имело бы некоторые последствия. Если родительский контроллер представления отображает представленный контроллер представления, что это вернет?
[childViewController presentedViewController];
Будет ли это nil
потому что родитель отображает это? Или этот запрос может быть передан родителю, чтобы parentViewController
и любой из его childViewControllers
все ли будут иметь одинаковые результаты?
В любом случае, у меня есть пример проекта, готового приступить к запуску некоторых сценариев, но мне интересно, есть ли какие-то документы, которые я пропустил? Или если кто-то уже знает о том, как происходит это взаимодействие?
2 ответа
Я работал над контроллером представления контейнера некоторое время назад и обнаружил, что реализация по умолчанию проверяет, parentViewController
существует, и если это так, он передает сообщение родителю.
Я не смог найти никакой документации по нему, поэтому вы не можете на него полностью положиться.
У Dr.Touch есть отличный пост именно об этом:
http://www.cocoanetics.com/2012/04/containing-viewcontrollers/
это необходимо прочитать, если вы находитесь в View Controller Containers