1

我正在快速开发一个 tvOS 应用程序。我UITabBarController在应用程序中使用。我的要求是在 10 秒后自动隐藏标签栏,并且焦点可以移动到AVPlayerViewController标签栏项目内。我试图覆盖preferredFocusedView,但焦点无法移动到AVPlayerViewController.

func updateFocus() {

    self.playerController.view.hidden = false
    self.playerController.view.alpha = 1.0
    self.playerController.view.userInteractionEnabled = true
    self.playerController.view.layer.zPosition = 1.0
    self.preferredFocusedView
    setNeedsFocusUpdate()
    updateFocusIfNeeded()
}

override var preferredFocusedView: UIView? {

    return self.playerController.view

}

请建议我如何以编程方式移动焦点。

4

1 回答 1

2

问题focus不在viewController那个时候,而是焦点在tabBarController,所以我建议你做这样的事情,创建一个TabBarController子类并将你的 tabController 的故事板中的类设置为该类,然后在子类中tabBarController做这样的事情。

  #import "TabBarViewController.h"

    @interface TabBarViewController ()

    @end

    @implementation TabBarViewController

    - (void)viewDidLoad {
        [super viewDidLoad];
        self.tabBar.alpha = 0;
        // set alpha = 1 back again when you need.
    }

    - (UIView*)preferredFocusedView
    {
// you can also add some if else here
        return [self.selectedViewController preferredFocusedView];// or you can do self.selectedViewController.view if that view is focusable
    }

    @end

我在这里选择的视图控制器是 FirstViewController,它看起来像这样并且工作正常。

#import "FirstViewController.h"

@interface FirstViewController ()
@property (weak, nonatomic) IBOutlet UIButton *button;

@end

@implementation FirstViewController

- (void)viewDidLoad {
    [super viewDidLoad];
}

- (UIView*)preferredFocusedView
{
    return _button;// return view which you want to make focus able
}
@end
于 2016-02-04T11:31:59.150 回答