在AppleTV上为UICollectionView实现自定义焦点行为

时间:2017-05-31 14:00:20

标签: swift uikit tvos apple-tv

我试图在tvOS上实现非常简单的用户界面,经过几次失败后似乎不可能。

我有两个水平滚动的集合视图。

  • 1st - cities
  • 第二 - 选项

所有城市的选项集都相同,但某些城市可以禁用某些选项。每个城市至少有一个选项。

用户可以通过关注特定细胞来选择城市和选项。当前选择在屏幕上可见(请参阅集合视图下的标签)

UI example

我想要做的是记住所选择的城市/选项,因此当我在thos集合视图之间更改选项时 - 之前选择的项目将变为焦点(选中)。 可以使用remembersLastFocusedIndexPath标记来UICollectionView,但集合视图会忽略已禁用的单元格。

例如,对于都柏林,已禁用附加项目选项3 。因此,如果用户选择伦敦,然后选择选项3 ,则将焦点移回城市集合视图并将选择更改为都柏林,然后选项3 被禁用(isUserInteractionEnabledfalsecollectionView(_ collectionView:, canFocusItemAt indexPath:)返回false)。但是,如果remembersLastFocusedIndexPath为真,则集合视图将忽略所有这些并尝试将焦点禁用为焦点。此时UI ob集合视图"打破了#34;:

broken UICollectionView

indexPathForPreferredFocusedView(in:)种方法,但对于首选UICollectionView,它只会被触发一次,即使Apple's documentation显而易见,但这种情况并不明显。

有没有办法写" custom"聚焦细胞的逻辑?我需要为选项集合视图实现的是选择当前选择的选项(如果可用)或第一个可用选项(如果当前选择的选项被禁用每次获得焦点)。 子类化UICollectionView不应成为解决问题的方法,因为它不应该了解数据模型。

您可以download test project

0 个答案:

没有答案