Предположим, что у меня есть контроллер контейнера, который принимает массив UIViewControllers и выдает их, чтобы пользователь мог прокручивать влево и вправо на переход между ними. Этот контроллер контейнера обернут внутри контроллера навигации и стал контроллером корневого представления главного окна приложения.
Каждый дочерний контроллер выполняет запрос к API и загружает список элементов, отображаемых в виде таблицы. На основе отображаемых элементов на навигационной панели может быть добавлена кнопка, которая позволяет пользователю действовать со всеми элементами в представлении таблицы.
Поскольку UINavigationController использует только UINavigationItems своих дочерних контроллеров представления, контроллер контейнера должен обновить свой UINavigationItem, чтобы синхронизировать с UINavigationItem своих дочерних элементов.
Кажется, существуют два сценария, которые должен обрабатывать контроллер контейнера:
- Изменяется выбранный контроллер представления контроллера контейнера, поэтому UINavigationItem контроллера контейнера должен обновить себя, чтобы имитировать UINavigationItem выбранного контроллера представления.
- Детский контроллер обновляет свой UINavigationItem, и контроллер контейнера должен быть ознакомлен с этим изменением и обновить его UINavigationItem для соответствия.
Лучшие решения, которые я придумал:
- В методе setSelectedViewController: запросите элемент навигации выбранного контроллера представления и обновите свойства leftBarButtonItems, rightBarButtonItems и свойства заголовка контроллера UINavigationItem контейнера, чтобы он был таким же, как выбранный UINavigationItem контроллера.
- В методе setSelectedViewController KVO на свойства leftBarButtonItems, rightBarButtonItems и свойство title выбранного контроллера UINavigationItem для просмотра и всякий раз, когда одно из этих свойств изменяет контейнерный контроллер UINavigationItem.
Это повторяющаяся проблема со многими контроллерами контейнеров, которые я написал, и я не могу найти каких-либо документированных решений этих проблем.
Какие решения люди нашли для этой проблемы?