是的,答案真的很简单。 Apple 打算将诸如 SplitViewControllers 之类的 UITabBarController 仅用作根视图控制器,因此您不能将 TabBarController 嵌套在另一个视图中,但是您可以将 UITabBar 嵌套在视图中。
我在底部的详细信息视图中添加了 Tabbar,在顶部添加了导航栏,然后在它们之间添加了占位符视图。全部在 Interface Builder 中!,您将希望使用占位符视图上的自动调整大小来打开所有内容。
接下来,实现 UITabBarDelegate。为此,您需要:
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
从中您可以使用 item.tag ,如果您在 Interface Builder 中为每个项目提供一个唯一的标签,它将让您知道用户单击了哪个选项卡。我为我设置了定义的值:
#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];
}
记住首先在 viewDidLoad 中分配视图(viewA、viewB、viewC),然后在 dealloc 中释放。还要注意 autoresizingMask!
希望这对其他人有所帮助。