2015-11-28 3 views
1

Вот моя ситуация:Как можно временно отключить tvOS UITabBarController

У меня есть приложение tvOS где базовая навигация является UITabBarController. Каждый контроллер корневого представления, на который ссылается UITabBarController, является UINavigationController, который затем обрабатывает нажатие ViewControllers в стеке. Когда конкретный ViewController (содержащий CollectionView) активен, мне нужно предотвратить способность tvOS UITabBarController по умолчанию для получения фокуса.

Я попытался спрятать TabBar вручную на ViewWillAppear, подклассифицируя TabBar и переопределяя предпочтительный вид фокусировки. В большинстве случаев дезактивация фокуса в TabBar приводит к деактивации фокуса в его activeViewController. В настоящее время мое решение заключается в переопределении метода делегирования «shouldUpdateFocusInContext» в моем ViewController и предотвращении любых фокусов на представлениях, которые не являются UICollectionViews. Это работает для этого одного случая, но, очевидно, является субоптимальным и взломанным решением.

override func shouldUpdateFocusInContext(context: UIFocusUpdateContext) -> Bool { 
    guard let nextFocusView = context.nextFocusedView else {return false} 

    if nextFocusView.isKindOfClass(UICollectionViewCell.classForCoder()) { 
     return true 
    } else { 
     return false 
    } 
} 

Кто-нибудь есть какие-либо лучшие идеи о том, чтобы временно предотвратить TabBar в UITabBarController от даже отображения, когда пользователь пойло на пульте tvOS?

ответ

0

Для предотвращения TabBar в UITabBarController от отображения, когда пользователь пойло вверх, используйте focusHeading:

-(BOOL)shouldUpdateFocusInContext:(UIFocusUpdateContext *)context 
{ 
    BOOL result = [super shouldUpdateFocusInContext:context]; 
    if (context.focusHeading == UIFocusHeadingUp) 
     return NO; 
    return result; 
} 

Это было особенно полезно для меня, потому что мой ViewController не имеет фокусируемые взглядов. Все, что у него есть, - scrollView на странице, которая использовала panGestureRecognizer.allowedTouchTypes для захвата swipes, и я не мог использовать nextFocusedView.

Редактировать

Я также нашел, что это полезно использовать -(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item, чтобы отслеживать, какие вкладки были выбраны таким образом, я не мог вернуться NO только для определенных вкладок.

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