Да, ответ действительно очень прост. Контроллеры UITabBarController, такие как SplitViewControllers, были предназначены Apple для того, чтобы когда-либо быть только Root View Controller, и, следовательно, вы не можете вкладывать TabBarController в другое представление, однако вы можете вложить UITabBar в представление.
Я добавил панель вкладок в представление сведений внизу, панель навигации вверху, а затем представление местозаполнителя между ними. Все в Интерфейсном Разработчике !, Вы захотите включить все с автоматическим изменением размера в представлении Заполнителя.
Далее, внедрите UITabBarDelegate. Для этого вам понадобится:
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
После этого вы можете использовать item.tag, который, если вы дадите каждому элементу уникальный тег в Интерфейсном Разработчике, сообщит вам, на какой вкладке нажал пользователь. Я установил определенные значения для моего:
#define VIEW_TAB_A 0
#define VIEW_TAB_B 1
#define VIEW_TAB_C 2
Тогда вам захочется ... ну, лучше, я просто дам вам посмотреть
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
[self switchToView:item];
}
- (void) switchToView : (UITabBarItem*) item {
if( currentViewController != nil ) {
[currentViewController viewWillDisappear:NO];
[currentViewController.view removeFromSuperview];
}
switch(item.tag) {
case VIEW_TAB_A:
currentViewController = self.viewA;
break;
case SCAN_VIEW_TAB_B:
currentViewController = self.viewB;
break;
case PROMOTIONS_VIEW_TAB_C:
currentViewController = self.viewC;
break;
}
UIView *aView = currentViewController.view;
aView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
aView.frame = placeholderView.frame;
[currentViewController viewWillAppear:NO];
[self.view insertSubview:aView aboveSubview:placeholderView];
if( currentViewController != nil ) {
[currentViewController viewDidDisappear:NO];
}
[currentViewController viewDidAppear:NO];
}
Не забудьте выделить виды (viewA, viewB, viewC) сначала в viewDidLoad и, очевидно, освободить в dealloc. Также обратите внимание на маску autoresizing!
Надеюсь, это поможет другим.