在tvOS开发中,默认情况下,表视图的焦点是第一项。但是,在默认情况下,如何在表视图中聚焦特定项。
例如,默认情况下,我希望将表视图的n第四行对焦。
谢谢你提前帮忙。

发布于 2016-02-25 18:32:53
要控制焦点引擎,通常您必须重写UIFocusEnvironment和/或相关的UITableViewDelegate和UICollectionViewDelegate方法提供的方法。这与控制所选行/项的行为大不相同,因为它是一个全局系统,而不是特定于特定视图的。
在您的特定情况下,实现在indexPathForPreferredFocusedViewInTableView(_:)上可用的UITableViewDelegate方法就足够了(请注意,UICollectionViewDelegate有一个等效的方法)。
我尝试做类似事情时遇到的一个问题是,默认的首选焦点视图链是如何工作的。最后,我注意到了UIFocusEnvironment的这一部分(所有视图和视图控制器都符合这个部分):
默认情况下,UIView返回自身,UIViewController返回其根视图。在可聚焦视图中返回self表示应该聚焦该视图。在非焦点视图中返回self会导致焦点引擎选择一个默认的首选焦点视图,方法是在屏幕的顶部前角找到最近的可聚焦子视图。返回零表示没有首选的聚焦视图。
在我的例子中,这意味着焦点引擎选择了一个默认的首选焦点视图,并且我的UICollectionView与焦点相关的委托方法没有像我预期的那样被调用。如果发现是这种情况,则可能需要在视图控制器子类上实现preferredFocusedView (在UIFocusEnvironment协议中定义),并返回UITableView实例,以便可靠地调用与焦点相关的委托方法。
发布于 2016-02-25 09:32:59
对于TVML,它是属性autoHighlight="true" (Guide/TVJSAttributes.html)
但是,并不是所有的模板都能工作,但系统中似乎仍然存在一些bug。
发布于 2019-09-13 07:38:25
第一件事就是
override var preferredFocusEnvironments: [UIFocusEnvironment] {
return [myTableView]
}func indexPathForPreferredFocusedView(in tableView: UITableView) -> IndexPath? {
if focusAtIndexPathRow != -1 {
return IndexPath(item: focusAtIndexPathRow, section: 0)
} else {
return IndexPath(item: 0, section: 0)
}
}https://stackoverflow.com/questions/35621811
复制相似问题