我试图在tvOS上实现非常简单的用户界面,经过几次失败后似乎不可能。
我有两个水平滚动的集合视图。
所有城市的选项集都相同,但某些城市可以禁用某些选项。每个城市至少有一个选项。
用户可以通过关注特定细胞来选择城市和选项。当前选择在屏幕上可见(请参阅集合视图下的标签)
我想要做的是记住所选择的城市/选项,因此当我在thos集合视图之间更改选项时 - 之前选择的项目将变为焦点(选中)。
可以使用remembersLastFocusedIndexPath
标记来UICollectionView
,但集合视图会忽略已禁用的单元格。
例如,对于都柏林,已禁用附加项目选项3 。因此,如果用户选择伦敦,然后选择选项3 ,则将焦点移回城市集合视图并将选择更改为都柏林,然后选项3 被禁用(isUserInteractionEnabled
为false
,collectionView(_ collectionView:, canFocusItemAt indexPath:)
返回false
)。但是,如果remembersLastFocusedIndexPath
为真,则集合视图将忽略所有这些并尝试将焦点禁用为焦点。此时UI ob集合视图"打破了#34;:
有indexPathForPreferredFocusedView(in:)
种方法,但对于首选UICollectionView
,它只会被触发一次,即使Apple's documentation显而易见,但这种情况并不明显。
有没有办法写" custom"聚焦细胞的逻辑?我需要为选项集合视图实现的是选择当前选择的选项(如果可用)或第一个可用选项(如果当前选择的选项被禁用每次获得焦点)。
子类化UICollectionView
不应成为解决问题的方法,因为它不应该了解数据模型。