Я пытаюсь реализовать структурированный пользовательский интерфейс, как в приложении Tweetie , который ведет себя так: контроллер представления верхнего уровня выглядит как контроллер навигации, корневым представлением которого является «Учетные записи» табличное представление. Если вы щелкнете по любой учетной записи, она перейдет на второй уровень, в нижней части которого находится панель вкладок. Каждый элемент вкладки отображает отдельный список и позволяет углубляться в детали (на последующих уровнях панель вкладок не отображается).
Итак, похоже, что иерархия реализации:
UINavigationController
- Счета :
UITableViewController
UITabBarController
- Твиты :
UITableViewController
- Подробный вид твита / пользователя / и т. Д.
- Ответы :
UITableViewController
- ...
Кажется, это работает [^ 1], но, похоже, не поддерживается в соответствии с документацией SDK для -pushViewController:animated:
(выделение добавлено):
viewController : Контроллер представления, который помещается в стек. Не может быть экземпляром контроллера панели вкладок.
Я бы хотел избежать частных API и тому подобного, но я не уверен, почему это использование явно запрещено, даже если кажется, что оно работает нормально. Кто-нибудь знает причину?
Я думал о том, чтобы поместить контроллер панели вкладок в качестве основного контроллера, где каждая вкладка содержит отдельные контроллеры навигации. Проблема заключается в том, что каждый контроллер nav должен иметь общий контроллер корневого представления (а именно таблицу «Accounts» в Tweetie ) - это, похоже, не работает: подталкивание контроллера таблицы ко второму Кажется, что Nav контроллер удаляет его с первого раза. Не упоминать всю бухгалтерию при выборе другой учетной записи, вероятно, было бы больно.
Как мне правильно реализовать это?
[^ 1]: Контроллер панели вкладок необходимо разделить на подклассы, чтобы элемент навигации контроллера панели вкладок на этом уровне синхронизировался с элементом навигации выбранной вкладки, и контроллеру таблицы отдельной вкладки необходимо выдвигать соответствующие подробные представления до self.tabBarController.navigationController
вместо self.navigationController
.