我有一个使用UITabBarController作为其主 Controller 的应用程序。

当用户点击一个按钮(不在选项卡栏中,只是其他一些按钮)时,我想在UITabBarController内添加新的UIViewController并显示它,但是我不希望新的UITabBarItem出现在选项卡栏中。如何实现这种行为?

我试图将tabBarController.selectedViewController属性设置为不在tabBarController.viewControllers数组中的 View Controller ,但没有任何 react 。如果我将 View Controller 添加到tabBarController.viewControllers数组,则新项目会自动显示在选项卡栏中。

更新

感谢Levi,我扩展了标签栏 Controller 以处理.viewControllers中不存在的 Controller 。

@interface MainTabBarController : UITabBarController

/**
 * By setting this property, tab bar controller will display
 * given controller as it was added to the viewControllers and activated
 * but icon will not appear in the tab bar.
 */
@property (strong, nonatomic) UIViewController *foreignController;

@end


#import "MainTabBarController.h"

@implementation MainTabBarController

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
  self.foreignController = nil;
}

- (void)setForeignController:(UIViewController *)foreignController
{
  if (foreignController) {
    CGFloat reducedHeight = foreignController.view.frame.size.height - self.tabBar.frame.size.height;
    foreignController.view.frame = CGRectMake(0.0f, 0.0f, 320.0f, reducedHeight);

    [self addChildViewController:foreignController];
    [self.view addSubview:foreignController.view];
  } else {
    [_foreignController.view removeFromSuperview];
    [_foreignController removeFromParentViewController];
  }

  _foreignController = foreignController;
}

@end

该代码将正确设置“外部” Controller 的 View 大小,并在用户在选项卡栏中选择项目时将其删除。

最佳答案

您可以推送它(如果您有导航 Controller ),也可以将其 View 添加到可见的View Controller View 中,并将其也添加为子View Controller。

关于ios - 将 Controller 添加到UITabBarController,而选项卡栏中未出现新项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15851376/

10-10 17:25