Основная идея решения, описанного ниже подкласс UITabBarController
и избирательно использовать super
реализацию weak var preferredFocusedView: UIView? { get }
или тот, который возвращает selectedViewController?.preferredFocusView
наряду с реализацией didUpdateFocusInContext(_:withAnimationCoordinator:)
, который устанавливает в NSTimer
, который запускает обновление фокусировки и устанавливает флаг, управляет реализацией preferredFocusView
.
Более подробно, Подкласс UITabBarController
и переопределить didUpdateFocusInContext(context: UIFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator)
. В вашей реализации (убедитесь, что вы вызываете реализацию super
) вы можете проверить контекст и определить, является ли представление потомка свойства tabBar
значением nextFocusedView
или previousFocusedView
(и nextFocusedView
не является потомком).
Если панель вкладок набирает фокус, вы можете создать NSTimer
на время, которое вы хотите показать панель вкладок, прежде чем спрятать его. Если панель вкладок теряет фокус до срабатывания таймера, аннулируйте его. Если таймер срабатывает, вызовите setNeedsFocusUpdate()
, а затем updateFocusIfNeeded()
.
Последний элемент, который вам нужен для работы, - это флаг, установленный на true
, когда установлен таймер. Затем вам необходимо переопределить weak var preferredFocusedView: UIView? { get }
и вызвать реализацию super
, если флаг равен false
, и если это true
return selectedViewController?.preferredFocusedView
.
Вы можете попробовать это https://stackoverflow.com/questions/35197806/how-to-change-focus-programmatically-in -tvos – vipulk617