Гибрид вкладок / навигации, как у iPod / Music
-
05-07-2019 - |
Вопрос
Я работаю над приложением, в котором я хотел бы использовать тот же гибрид навигации и панелей вкладок, что и в приложении iPod / Music для навигации по спискам воспроизведения.
В основном:
- Навигация для более глубокого изучения конкретного дерева списка.
- Панель вкладок внизу для переключения между списками, которая отображается на большинстве / всех нижних экранах.
- Содержимое панели вкладок остается неизменным на всех экранах.
- Реакция панели вкладок на нажатие одинакова на всех экранах:он возвращает пользователя обратно в корневой каталог и помещает его в этот список.
Навигация, встроенная во вкладки, вкладки, встроенные в навигацию?Ни то, ни другое, похоже, не сделает совсем того, чего я хочу.С другой стороны, если я использую базовое навигационное приложение и просто добавляю вкладки, разве у меня не будет много дополнительного кода?
Каков наилучший базовый подход для этого?
Решение
Я создал приложения, которые делают именно это.Лучший способ подумать об этом - начать с самой узкой части, отдельных контроллеров просмотра.В примере iPod это будет включать контроллеры для исполнителей, Альбомов, списков воспроизведения, песен и т.д.Примечание. если вы нажмете на список воспроизведения, вы перейдете к списку песен.Это два отдельных контроллера представления.
На каждой из вкладок, которые вы видите в приложении iPod, есть навигационный контроллер.Навигационный контроллер оборачивает контроллеры корневого представления вкладок приложения.И затем каждый из навигационных контроллеров устанавливается в качестве ViewControllers контроллера tab.Код будет выглядеть примерно так
FirstTabViewController *first = [[FirstTabViewController alloc] init...];
SecondTabViewController *second = ...;
UINavigationController *nav1 = [[UINavigationController alloc] initWithRootViewController:first];
UINavigationController *nav2 = [[UINavigationController alloc] initWithRootViewController:second];
myTabBarController.viewControllers = [NSArray arrayWithObjects:nav1, nav2, nil];
// Then make sure to release things to avoid leaks
Если бы вы хотели обработать переход, скажем, из списка воспроизведения-> Список песен в выбранном списке воспроизведения, вы бы сделали это в Playlist viewcontroller ([self.navigationController pushViewController:theListOfSongsViewController animated:SUREWHYNOT]
).
Другие советы
Пока что я смотрю на UITabBarController с UINavigationControllers на каждой панели с небольшим пользовательским кодом для возврата контроллера навигации на целевой вкладке обратно в корневой каталог при переключении вкладок.
У Apple есть отличная документация по объединению контроллеров просмотра (контроллеры навигации внутри контроллеров вкладок).