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