2012-06-21 7 views
0

Дизайн требования:Контроллер панели вкладок внутри контроллера навигации, как вывести новые контроллеры просмотра в tabcontroller?

  1. Показать список элементов, пользователь может выбрать один из
  2. После того, как выбрали элемент, принести пользователю новое представление с кнопкой назад. Новое представление должно содержать список вкладок внизу, которые не присутствуют на первом экране.
  3. При нажатии элемента на вкладках новый экран должен появиться с помощью кнопки «Назад», а вкладки должны быть видны внизу ,
  4. При нажатии на вкладку пользователь должен вернуть иерархию в # 2. Не для первого экрана.

Я попробовал следующую структуру:

, а также

  • UINavigationController
  • UIViewController с UITableView
  • UITabbarController

Оба случая прекрасно работают с отображением UITabBar, но когда я нажимаю элемент в одной из вкладок и нажмите новую UIViewController, то вкладки внизу исчезают. Я хочу, чтобы вкладки оставались на месте для всех нажатых UIViewControllers, которые происходят внутри вкладки UITabBarController.

Смежный вопрос этот один, но он не имеет дело с проблемой подтолкнули viewcontrollers внутри вкладки: Tab bar controller inside a navigation controller, or sharing a navigation root view

Мне нужно изменить rootcontroller к UITabController ли? Кто-нибудь действительно реализовал это?

ответ

3

Вот правильная структура:

UITabBarcontroller (UIWindow's rootViewController) 
->UINavigationController (first tab) 
-->UIViewController 
->UINavigationController (second tab) 
-->UIViewController 
+0

Но мне не нужны вкладки на первом экране. Мой первый экран - это список элементов (например, учетные записи в Tweetie). При нажатии на элемент я нажимаю новый контроллер, который показывает вкладки. Это основная проблема, поскольку это немного «нестандартно», но Tweetie сделал это, когда он был доступен в AppStore. –

+0

То же самое. Вам просто нужно программно создать свой UITabBarController, а затем инициализировать UINavigationController с помощью rootViewController для каждого навигатора. контроллер (которые являются вашими фактическими контроллерами) и установите свойство viewControllers для контроллера панели вкладок с массивом созданных вами контроллеров навигации ... – graver

+1

О, я не уверен, как я пропустил этот. Спасибо, что указали! Теперь у меня есть два навигатора, но, по крайней мере, это работает. Я просто вытащу некоторые магические трюки, чтобы показать правильный :-) –

3

Это звучит, как вы хотите изменить макет вашего зрения иерархии с учетом ваших требований. Вы должны представить свои контроллеры просмотра, как например:

UITabBarController -> UINavigationController -> UIViewController

В делегат своего приложения, вы можете реализовать это программно, используя что-то вдоль линий:

UIViewController *viewControllerOne = [[[UIViewController alloc] init] autorelease]; 
UINavigationController *navigationControllerOne = [[[UINavigationController alloc] initWithRootViewController:viewControllerOne] autorelease]; 

UIViewController *viewControllerTwo = [[[UIViewController alloc] init] autorelease]; 
UINavigationController *navigationControllerTwo = [[[UINavigationController alloc] initWithRootViewController:viewControllerTwo] autorelease]; 

UITabBarController *tabBarController = [[[UITabBarController alloc] init] autorelease]; 

[tabBarController setViewControllers:[NSArray arrayWithObjects:navigationControllerOne, navigationControllerTwo, nil]]; 

[[self window] setRootViewController:tabBarController] 

I убежище 't проверил выше, он просто написан из памяти, но должен делать то, что вам нужно в качестве примера.

Используя этот формат, вы можете подключить любые дополнительные контроллеры представлений к стеку навигационного контроллера без исчезновения панели вкладок.

Если вы хотите нажать эту иерархию представлений, не имея контроллера панели вкладок в качестве контроллера корневого представления, просто нажмите контроллер панели вкладок вместо того, чтобы устанавливать его в качестве контроллера корневого представления в делегате приложения.

Надеюсь, что это поможет!

+0

Спасибо! Я обновил вопрос, увидев, что это немного неясно. Мне не нужны вкладки на первом экране, так что я могу переключить rootController туда и обратно между tabController и navigationController? –

+0

Да, это возможно. Или вы можете нажать контроллер панели вкладок с вашего исходного контроллера представления, а не изменять контроллер корневого представления. – CaptainRedmuff

Смежные вопросы