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

How to move the focus from a button to another in tvOS?

我是 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()
}

这应该会将焦点系统更新到您的其他按钮。

另一种选择是在按钮 A(例如)获得焦点时执行如下操作:

buttonB.setNeedsFocusUpdate()
viewController.setNeedsFocusUpdate()

不过,这仅在它们在视图层次结构中处于同一级别时才有效。如果不是,那么您可能需要将对 setNeedsFocusUpdate 的调用一直链接到层次结构或其他东西...

Read more here