问题
I am developing a tvOS app in swift. I am using UITabBarController in the app.
My requirement is to hide the tabbar automatic after 10 seconds and focus can move to AVPlayerViewController inside the tabbar item.
I tried to override preferredFocusedView, but focus cannot move to 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
}
Please suggest me how to move focus programmatically.
回答1:
Issue is focus is not in viewController at that time instead focus is in tabBarController, so what I will suggest you is do something like this,
Create a TabBarController subClass and set class of your tabController in story board to that class, and then in tabBarController subClass do something like this.
#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
My selected view controller here is FirstViewController which look like this and its working fine.
#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
来源:https://stackoverflow.com/questions/35197806/how-to-change-focus-programmatically-in-tvos