2

我正在开发 Apple TV 应用程序。在我的应用程序中,我制作了一个具有集合视图的屏幕。在这种情况下,我可以将焦点移动到集合视图单元格,但无法将焦点移动到集合视图单元格中的按钮,所以有人可以帮我解决这个问题吗?

如果有人知道这个答案,请给我一个答案。

4

2 回答 2

3

我可以通过在 collectionViewCell 子类中添加以下方法来解决这个问题。

在 CollectionViewCell 子类中

override var preferredFocusEnvironments: [UIFocusEnvironment]{
    // Condition
}
override func shouldUpdateFocus(in context: UIFocusUpdateContext) -> Bool {
    // Condition
}
override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {
    // Condition
}

您可以在此链接中查看更多信息: 在此处输入链接描述

于 2016-12-20T04:45:49.573 回答
1

我认为这个页面将指导实现你想要的。https://developer.apple.com/library/content/documentation/General/Conceptual/AppleTV_PG/WorkingwiththeAppleTVRemote.html#//apple_ref/doc/uid/TP40015241-CH5-SW4

它很好地解释了焦点引擎将如何决定哪个对象应该获得下一个焦点。以下是上述链接的逐步解释。

这是一个显示如何确定焦点的示例:

  1. 焦点引擎向根窗口询问它的preferredFocusedView,它返回它的根视图控制器的preferredFocusedView 对象。
  2. 根视图控制器,一个选项卡视图控制器,返回其选择视图控制器的preferredFocusedView 对象。
  3. 选择视图控制器覆盖了它的 preferredFocusedView 方法以返回一个特定的 UIButton 实例。
  4. UIButton 实例返回 self(默认值),并且是可聚焦的,因此它被焦点引擎选择为下一个焦点视图。

您必须覆盖 UIView 或 UIViewController 的 preferredFoucsedView 属性。

override weak var preferredFocusedView: UIView? {
    if someCondition {
        return theViewYouWant
    } else {
        return defaultView
    }
}

感谢Slayter 的回答

于 2016-11-29T06:52:45.433 回答