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

时间:2016-01-04 19:02:46

标签: swift2 tvos

我正在尝试以编程方式将焦点从一个视图移动到另一个视图,就像按下按钮一样,我试图在集合视图中选择一个索引。

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

我试过了:

- collectionView.selectItemAtIndexPath(selectedIndexPath, animated: false, scrollPosition: .None)
       collectionView.reloadData()
       setNeedsFocusUpdate()
       collectionView.updateFocusIfNeeded()

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

我正在构建一个tvOS原生应用程序。

1 个答案:

答案 0 :(得分:9)

根据App Programming Guide for tvOS,没有明确的方法可以按照编程方式将焦点从一个视图移动到另一个视图:

  

焦点引擎控制焦点

     

只有焦点引擎才能显式更新焦点,这意味着没有用于直接设置焦点视图或在特定方向上移动焦点的API。 ...

     

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

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

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

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