2016-02-03 2 views
2

Есть ли все-таки, чтобы обнаружить, что табуляция UITabBarController появится или исчезнет? Я хочу сделать анимацию одновременно с анимацией, которая отображает/скрывает вкладку.TvOS UITabBarController обнаруживает вкладку, отображаемую/скрытую

Я не нашел способа обнаружить это событие. Свойство «скрытое» в TabBar не вариант, потому что он меняет свое значение после того, как анимация закончила

+0

Вы можете использовать viewController viewWillAppear для обнаружения вкладки. И вы можете отправить уведомление, или вы можете использовать делегат для его обнаружения в своем UITabBarController –

+0

Но в TvOS можно отобразить вкладку без изменения контроллера вида (просто нажав кнопку меню или переместив uo с удаленной трак-панелью), и в этом случае Я не смогу обнаружить, что отображается панель вкладок. – rai212

ответ

4

Решения было использовать метод в didUpdateFocusInContext вида контроллера: withAnimationCoordinator: с этим кодом:

static NSString *kUITabBarButtonClassName = @"UITabBarButton"; 

NSString *prevFocusViewClassName = NSStringFromClass([context.previouslyFocusedView class]); 
    NSString *nextFocusedView = NSStringFromClass([context.nextFocusedView class]); 

    // The tabbar is going to disappear 
    if ([prevFocusViewClassName isEqualToString:kUITabBarButtonClassName] && 
     ![nextFocusedView isEqualToString:kUITabBarButtonClassName]) { 
     [self.view layoutIfNeeded]; 
     self.constraintScrollViewCenterY.constant -= self.tabBarController.tabBar.frame.size.height; 

     [coordinator addCoordinatedAnimations:^{ 
      [self.view layoutIfNeeded]; 
     } completion:nil]; 
    // The tabbar is going to appear 
    } else if (![prevFocusViewClassName isEqualToString:kUITabBarButtonClassName] && 
       [nextFocusedView isEqualToString:kUITabBarButtonClassName]) { 
     [self.view layoutIfNeeded]; 
     self.constraintScrollViewCenterY.constant += self.tabBarController.tabBar.frame.size.height; 

     [coordinator addCoordinatedAnimations:^{ 
      [self.view layoutIfNeeded]; 
     } completion:nil]; 
    } 

где self.constraintScrollViewCenterY это ограничение связано с вертикальным выравниванием зрения я хочу двигаться в соответствии с движением TabBar

Примечание: использование имени класса (kUITabBarButtonClassName) вместо [... класс] метод является из-за UITabBarButton является частным классом

+0

У меня есть несколько контроллеров представлений для моей панели вкладок. Это означало бы, что мне пришлось бы писать этот код в каждом из контроллеров представления. –

+0

Да, вам нужно будет использовать этот код во всех контроллерах view. Возможно, вы могли бы использовать базовый класс с этим кодом, из которого наследуется – rai212

Смежные вопросы