我在 iPhone 应用程序中有一个常见的标签栏,包含三个选项卡,在按下按钮后从几个视图中呈现。我采用的方法是仿照 Tweetie 应用程序中描述在 Robert Conn 的文章 中的工作流程。
请注意,主控制器是导航控制器;标签栏放置在视图控制器的 NIB 文件中,并且在 delegate 的 didSelectItem 方法中处理切换选项卡的效果。
@interface GameTabBarController : UIViewController<UITabBarDelegate> {
UITabBar *tabBar;
UITabBarItem *lastGameTabBarItem;
UITabBarItem *previousGamesTabBarItem;
UITabBarItem *myBetsTabBarItem;
NSArray *viewControllers;
UIViewController *currentViewController;
}
@implementation GameTabBarController
...
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
UIViewController *viewController = nil;
// Get the view controller linked to the tab bar item pressed
...
// Switch to the view
[self.currentViewController.view removeFromSuperview];
[self.view addSubview:viewController.view];
self.currentViewController = viewController;
}
...
@end
由于选项卡栏的视图必须根据应用程序所来自的视图控制器进行自定义,因此我将这个 GameTabBarController
设计为一个父类,并在其中使用该具有标签栏的 NIB 文件。然后,我创建了几个子类:
@interface FirstGameTabBarController : GameTabBarController {
...
}
@interface SecondGameTabBarController : GameTabBarController {
...
}
...
我的问题是,在某些子类中,我想删除与父类关联的NIB文件的第三个选项卡。但由于没有涉及UITabBarController,因此我无法像在网上找到的典型方法一样删除选项卡条目的视图控制器。如何做到这一点?是否可以删除先前在NIB文件中添���的元素?
谢谢!
更新 解决方案非常简单...我只需要替换选项卡条目,而不是视图控制器:
NSMutableArray *items = [NSMutableArray arrayWithArray:self.tabBar.items];
[items removeObjectAtIndex:2];
[self.tabBar setItems:items];
感谢 @Praveen S 指导我正确的方向。