如何在超过5个选项卡之间切换时保持标签栏隐藏

时间:2015-01-21 00:38:51

标签: ios xcode uitabbarcontroller uitabbar

我有一个UITabBarController作为我的应用程序的根视图控制器。它有6个选项卡,但应用程序有一个自定义弹出视图,其中有6个按钮用于选择每个选项卡。标签栏本身一直处于隐藏状态。

问题是,一旦我尝试以编程方式选择索引5或6处的选项卡,我就会遇到问题。选项卡1-4很好,它们在代码中被选中,新的视图控制器出现在屏幕上。但是因为标签5& 6在技术上属于"更多"选项卡,标签栏会短暂显示,显示动画以选择"更多"选项卡然后再次消失。这也使这些"额外"使用" more"查看新导航控制器中的控制器表视图作为根视图控制器。这会添加新的导航栏并导致其他问题。

有没有办法做以下任何一种情况?

  1. 标签栏中有超过5个标签而没有"更多"标签。
  2. 停用"更多"标签栏选择动画和相关导航控制器的添加。
  3. 创建一个可以完全替换UITabBarController的简单自定义控制器。
  4. 似乎在很多情况下,人们想要显示超过5个标签然后隐藏标签栏但我找不到任何人讨论此问题。

2 个答案:

答案 0 :(得分:0)

根据您的要求,我认为您需要一个自定义Tabar控制器。

这个项目可以帮到你:

RDVTabBarController

此外,我必须提醒您,使用自定义标签栏控制器可能会失去使用系统标签控制器提供的便捷功能的机会。

仅当系统标签栏控制器不符合您的需要时,才应使用自定义标签栏控制器。

答案 1 :(得分:0)

尝试以下代码。这里使用的ViewController是UITabBarController的子类。在.h文件中添加ITabBarDelegate,UITabBarControllerDelegate。我想这样你就可以添加6个标签。我在这里做了两个标签并用动画过渡。使用委托方法

  • (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController

如下所示应用动画。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    fvcontroller = [self.storyboard instantiateViewControllerWithIdentifier:@"navcontroller"];
    svcontroller = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
    NSMutableArray *viewcontrollers = [[NSMutableArray alloc]init];
    [viewcontrollers addObject:fvcontroller];
    [viewcontrollers addObject:svcontroller];


    [self setViewControllers:viewcontrollers];

    fvcontroller.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"Me" image:[UIImage imageNamed:@"me.png"] tag:1];
    svcontroller.tabBarItem =  [[UITabBarItem alloc]initWithTitle:@"Chat" image:[UIImage imageNamed:@"chat3.png"] tag:2];
    // _tbbar.delegate = self;
    self.delegate = self;

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];

}


- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
    UIView *from = self.selectedViewController.view;
    UIView *to = viewController.view;
    NSInteger fromindex = [self.viewControllers indexOfObject:self.selectedViewController];
    NSInteger toindex = [self.viewControllers indexOfObject:viewController];

    [UIView transitionFromView:from
                        toView:to
                      duration:.5
                       options:UIViewAnimationOptionTransitionFlipFromBottom
                    completion:^(BOOL finished) {
                        if (finished) {
                            tabBarController.selectedIndex = toindex;
                        }
                    }];

 //(toindex > fromindex ? UIViewAnimationOptionTransitionCurlUp : UIViewAnimationOptionTransitionCurlDown)

    return NO;
}
@end