如何以编程方式删除在父类NIB文件中创建的选项卡栏项目?

问题描述 投票:14回答:4

在我的iPhone应用程序中,我有一个带有三个选项卡的公共选项卡,按下按钮后会从多个视图中显示。我遵循的方法是Tweetie应用程序的工作流程,在Robert Conn post中进行了描述。

注意,主控制器是导航控制器;选项卡栏放置在导航堆栈的视图控制器的NIB文件中,选项卡之间的切换效果由委托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文件中添加的元素?

谢谢!

UPDATE

解决方案非常简单...我只需要替换选项卡栏项,而不是视图控制器即可:
NSMutableArray *items = [NSMutableArray arrayWithArray:self.tabBar.items];
[items removeObjectAtIndex:2];
[self.tabBar setItems:items];

感谢@Praveen S指出正确的方向。

在我的iPhone应用程序中,我有一个公用的标签栏,其中包含三个标签,按下一个按钮后,这些标签会从多个视图中显示。我遵循的方法是Tweetie应用程序的工作流程,...

iphone ios4 uitabbar nib uitabbaritem
4个回答
43
投票

以下代码提供了解决方案:


6
投票

Swift 4


4
投票

这就是Swift 4和5


1
投票

您可以在班级中保存对该选项卡栏对象的引用,并对其执行所需的操作。

© www.soinside.com 2019 - 2024. All rights reserved.