如何在 tvOS 中以编程方式更改焦点
How to change focus programmatically in tvOS
我正在 swift 开发 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
}
请建议我如何以编程方式移动焦点。
问题是当时 focus
不在 viewController
中,而是焦点在 tabBarController
中,所以我建议你做这样的事情,
创建一个 TabBarController
子类并将情节提要中的 tabController 的 class 设置为 class,然后在 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
我正在 swift 开发 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
}
请建议我如何以编程方式移动焦点。
问题是当时 focus
不在 viewController
中,而是焦点在 tabBarController
中,所以我建议你做这样的事情,
创建一个 TabBarController
子类并将情节提要中的 tabController 的 class 设置为 class,然后在 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