2015-01-21 3 views
0

У меня есть UITabBarController в качестве моего контроллера корневого представления для моего приложения. Он имеет 6 вкладок, но приложение имеет настраиваемое всплывающее окно с 6 кнопками, используемыми для выбора каждой вкладки. Сама панель вкладок всегда скрыта.Как сохранить панель вкладок скрытой при переключении между более чем 5 вкладками

Проблема в том, что я пытаюсь программно выбрать вкладку с индексом 5 или 6. Я получаю проблему. Вкладки 1-4 в порядке, они выбираются в коде, и на экране появляется новый контроллер представления. Но так как вкладки 5 & 6 технически находятся на вкладке «больше», панель вкладок отображается кратко, отображает анимацию, чтобы выбрать вкладку «больше», а затем снова исчезает. Это также добавляет эти «дополнительные» контроллеры представлений в новый контроллер навигации с табличным представлением «больше» в качестве контроллера корневого представления. Это добавляет новую панель навигации и вызывает другие проблемы.

Есть ли способ сделать одно из следующего?

  1. Имейте более 5 вкладок в панели вкладок без вкладки «больше».
  2. Отключите анимацию выбора «больше» и добавьте соответствующий навигационный контроллер.
  3. Создайте простой пользовательский контроллер, который полностью заменит UITabBarController.

Похоже, что существует много ситуаций, когда нужно было бы отображать более 5 вкладок и все же скрывать панель вкладок, но я не мог найти, чтобы кто-нибудь обсуждал эту проблему.

ответ

0

В соответствии с вашими требованиями, мне кажется, вам нужен пользовательский контроллер табаров.

Этот проект может помочь вам:

RDVTabBarController

Кроме того, я должен предупредить вас, что с помощью контроллера пользовательских TabBar вы можете потеряли шансы использовать удобные функции, которые обеспечивает система Tabber contrller.

Вы должны использовать настраиваемый контроллер таблеток только в том случае, если системный элемент управления панелью не подходит вам.

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 
Смежные вопросы