Menu 如何在tvOS中将焦点从一个按钮移动到另一个按钮?

Menu 如何在tvOS中将焦点从一个按钮移动到另一个按钮?,menu,focus,tvos,apple-tv,Menu,Focus,Tvos,Apple Tv,我是tvOS的新手。我希望有一个标准按钮,一旦按下,它会将焦点移动到另一个标准按钮,我如何才能做到这一点(当然,如果可能的话)?首先使用自定义属性覆盖viewController中的preferredFocusedView: var myPreferredFocusedView:UIView? override var preferredFocusedView: UIView? { return myPreferredFocusedView:UIView } 然后,在按钮回调中,将my

我是tvOS的新手。我希望有一个标准按钮,一旦按下,它会将焦点移动到另一个标准按钮,我如何才能做到这一点(当然,如果可能的话)?

首先使用自定义属性覆盖viewController中的
preferredFocusedView

var myPreferredFocusedView:UIView?
override var preferredFocusedView: UIView? {
    return myPreferredFocusedView:UIView
}
然后,在按钮回调中,将
myPreferredFocusedView
设置为下一个应获得焦点的首选按钮。之后,直接请求焦点更新:

func buttonCallback(){
    myPreferredFocusedView = button2 // button2 is an example 

    /*
        Trigger the focus system to re-query the view hierarchy for preferred
        focused views.
    */
    setNeedsFocusUpdate()
    updateFocusIfNeeded()
}

这会将焦距系统更新到其他按钮。

另一个选项是,当buttonA(例如)具有焦距时,执行以下操作:

buttonB.setNeedsFocusUpdate()
viewController.setNeedsFocusUpdate()
不过,这仅在它们位于视图层次结构中的同一级别时有效。如果没有,那么您可能需要将调用链接到
setNeedsFocusUpdate
层次结构或其他层次结构上


非常感谢你,安托万。它工作得很好,我现在遇到的唯一问题是,当离开视图然后回来时,焦点丢失,我需要使用箭头键(或在遥控器上拖动)来获取任何具有焦点的按钮。我将尝试对此进行更多研究…您可以使用相同的代码。只需确保设置了
首选焦点视图
,并在viewWillAppear@Antoine你能给我一个在tvOS中编程10秒后自动将焦点选项卡移动到AVPlayerViewController的主意吗?我试图将焦点选项卡移动到AVPLAYERVIEW以覆盖preferredFocusedView方法,但无法移动在程序上。