【问题标题】:How can I temporarily deactivate tvOS UITabBarController如何暂时停用 tvOS UITabBarController
【发布时间】:2015-11-28 04:18:40
【问题描述】:

这是我的情况:

我有一个 tvOS 应用程序,其中基本导航是一个 UITabBarController。从 UITabBarController 引用的每个根视图控制器都是一个 UINavigationController,然后它处理将 ViewControllers 推送到堆栈上。当特定的 ViewController(包含 CollectionView)处于活动状态时,我需要阻止默认的 tvOS UITabBarController 获得焦点的能力。

我尝试在 ViewWillAppear 上手动隐藏 TabBar,将 TabBar 子类化并覆盖首选焦点视图。在大多数情况下,在 TabBar 中取消激活焦点会导致在其 activeViewController 中取消激活焦点。目前我的解决方案是覆盖我的 ViewController 中的“shouldUpdateFocusInContext”委托方法,并防止将焦点放在不是 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
    }
}

关于如何在用户在 tvOS 遥控器上向上滑动时暂时阻止 UITabBarController 的 TabBar 显示,任何人有更好的想法吗?

【问题讨论】:

    标签: uitabbarcontroller tvos


    【解决方案1】:

    为了防止UITabBarController的TabBar在用户向上滑动时显示,使用focusHeading:

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

    这对我特别有用,因为我的 ViewController 没有任何可聚焦的视图。它所拥有的只是页面上的一个滚动视图,它使用panGestureRecognizer.allowedTouchTypes 来捕获滑动,而我无法使用nextFocusedView

    编辑

    我还发现使用 -(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item 来跟踪选择了哪个选项卡很有用,这样我就可以只对某些选项卡返回 NO。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多