首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tvOS -在表视图中聚焦特定项

tvOS -在表视图中聚焦特定项
EN

Stack Overflow用户
提问于 2016-02-25 08:18:04
回答 3查看 1.3K关注 0票数 0

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

例如,默认情况下,我希望将表视图的n第四行对焦。

谢谢你提前帮忙。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-25 18:32:53

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

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

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

默认情况下,UIView返回自身,UIViewController返回其根视图。在可聚焦视图中返回self表示应该聚焦该视图。在非焦点视图中返回self会导致焦点引擎选择一个默认的首选焦点视图,方法是在屏幕的顶部前角找到最近的可聚焦子视图。返回零表示没有首选的聚焦视图。

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

票数 2
EN

Stack Overflow用户

发布于 2016-02-25 09:32:59

对于TVML,它是属性autoHighlight="true" (Guide/TVJSAttributes.html)

但是,并不是所有的模板都能工作,但系统中似乎仍然存在一些bug。

票数 0
EN

Stack Overflow用户

发布于 2019-09-13 07:38:25

第一件事就是

  1. 在视图加载期间,设置:
代码语言:javascript
复制
override var preferredFocusEnvironments: [UIFocusEnvironment] {
        return [myTableView]
    }
  1. 要专注于某个特定的IndexPath,
代码语言:javascript
复制
func indexPathForPreferredFocusedView(in tableView: UITableView) -> IndexPath? {
        if focusAtIndexPathRow != -1 {
            return IndexPath(item: focusAtIndexPathRow, section: 0)
        } else {
            return IndexPath(item: 0, section: 0)
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35621811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档