tvOS - 将特定项目聚焦在表格视图中

时间:2016-02-25 08:18:04

标签: objective-c uitableview tvos

tvOS 开发中 - 默认情况下,表格视图的焦点是第1项。但是,如何在表视图中默认聚焦特定项目。

例如,默认情况下,我想要关注表格视图的 n 行。

提前感谢您的帮助。

enter image description here

3 个答案:

答案 0 :(得分:2)

要控制焦点引擎,您必须覆盖UIFocusEnvironment和/或相关UITableViewDelegateUICollectionViewDelegate方法提供的方法。这与控制所选行/项目之类的行为大不相同,因为它是一个全局系统,而不是特定于特定视图。

在您的特定情况下,实施indexPathForPreferredFocusedViewInTableView(_:)上可用的UITableViewDelegate方法可能就足够了(请注意UICollectionViewDelegate有一种等效的方法)。

尝试做类似事情时遇到的一个问题是首选焦点视图的默认链如何工作。最后我注意到the documentation for UIFocusEnvironment的这一部分(所有视图和视图控制器都符合):

  

默认情况下,UIView返回自身,UIViewController返回它   根视图。在可聚焦视图中返回self表示该视图   应该集中精力。在一个不可聚焦的视图中回归自我导致了   通过查找,焦点引擎选择默认的首选焦点视图   最近的可聚焦子视图到屏幕的顶部前角。   返回nil表示没有首选的焦点视图。

在我的情况下,这意味着焦点引擎正在选择默认的首选焦点视图,并且我的UICollectionView的焦点相关委托方法没有像我预期的那样被调用。如果您发现这种情况,您可能需要在视图控制器子类上实现preferredFocusedView(在UIFocusEnvironment协议中定义)并返回UITableView的实例,以便委托方法与焦点被可靠地调用。

答案 1 :(得分:0)

使用TVML,它是属性{{1}} (https://developer.apple.com/library/tvos/documentation/LanguagesUtilities/Conceptual/ATV_Template_Guide/TVJSAttributes.html

不适用于所有模板,但系统中似乎仍然存在一些错误。

答案 2 :(得分:0)

第一件事,

  1. 在视图加载期间,设置:
override var preferredFocusEnvironments: [UIFocusEnvironment] {
        return [myTableView]
    }
  1. 要专注于特定的IndexPath,
func indexPathForPreferredFocusedView(in tableView: UITableView) -> IndexPath? {
        if focusAtIndexPathRow != -1 {
            return IndexPath(item: focusAtIndexPathRow, section: 0)
        } else {
            return IndexPath(item: 0, section: 0)
        }
    }