UICollectionView:以编程方式将焦点从一个视图移动到另一个视图 - tvOS

cre*_*_rd 2 swift2 tvos

我试图以编程方式将焦点从一个视图移动到另一个视图,就像在按钮单击上我试图在集合视图中选择索引.

我试图复制作为SIRI的工作功能,因为siri不对开发者开放,但我发送节目通过bonjour播放到应用程序,以便它只播放它的点是节目即索引路径应该集中在之前视频播放就像NBC应用程序在tvOS中一样.

我试过了:

- collectionView.selectItemAtIndexPath(selectedIndexPath, animated: false, scrollPosition: .None)
       collectionView.reloadData()
       setNeedsFocusUpdate()
       collectionView.updateFocusIfNeeded()
Run Code Online (Sandbox Code Playgroud)

没有什么似乎工作,并将焦点转移到给定索引我想知道是否可能在tvOS中?

我正在构建一个tvOS本机应用程序.

小智 9

根据tvOS应用程序编程指南,没有明确的方法可以将焦点从一个视图以编程方式移动到另一个视图:

焦点引擎控制焦点

只有焦点引擎才能明确更新焦点,这意味着没有用于直接设置焦点视图或将焦点移动到特定方向的API....

焦点引擎控制焦点以确保它不会意外地在屏幕上移动,并且它在不同的应用程序中表现相似.

但是,您可以让UICollectionViewDelegate为集合视图的首选焦点项指定索引路径,该集中项将在集中视图聚焦时聚焦该索引路径:

func indexPathForPreferredFocusedViewInCollectionView(_ collectionView: UICollectionView) -> NSIndexPath? {
    // Return index path for selected show that you will be playing
    return NSIndexPath(forRow: ..., inSection: ...)
}
Run Code Online (Sandbox Code Playgroud)

此委托方法的功能相当于覆盖UIFocusEnvironment协议中的UICollectionView类的preferredFocusedView方法.如果集合视图的remembersLastFocusedIndexPath方法设置为YES,则此方法定义在第一次聚焦集合视图时聚焦的索引路径.