Взаимодействие между addChildViewController UINavigationController и topViewController
У меня есть что-то вроде модального контроллера вида, который мне нужно отобразить над другими контроллерами вида. Я не использую обычную функцию модального контроллера (presentViewController:
и друзья), так как мне нужен лучший контроль над процессом. Вместо этого я использую функцию сдерживания контроллера вида (группа методов addChildViewController:
).
Теперь проблема заключается в том, что вызов addChildViewController:
на навигационном контроллере также устанавливает новый контроллер как topViewController
, как если бы контроллер был выдвинут с помощью обычного метода pushViewController:
. Это означает, что в то время как модальный контроллер отображается, обычный контроллер под ним не получает внешний вид и вращение обратных вызовов.
Это похоже на ошибку, или я что-то упустил?
2 ответа:
У меня была такая же проблема. Я решил эту проблему, написав свой собственный пользовательский контроллер представления, содержащий
UINavigationController
(добавленный черезaddChildViewController:
), а затем раскрывающийUINavigationController
как свойство только для чтения. Затем вы можете добавить свой модальный контроллер вида в качестве дочернего элемента вашего нового пользовательского контроллера вида, а не в качестве дочернего элементаUINavigationController
Я пропустил это предложение в документации для
addChildViewController:
Этот метод предназначен только для вызова реализацией a пользовательский контроллер вида контейнера.
Так что я думаю, что это моя вина, и этот сценарий просто не поддерживается. Это отстой, потому что очень удобно проектировать любые модальные вещи как обычные контроллеры вида и подключать их к иерархии, как подобает первоклассным гражданам. Вероятно, мне придется переписать навигационный контроллер. самостоятельно иметь встроенную поддержку для этого.