【发布时间】:2019-10-29 23:52:55
【问题描述】:
在自定义控件中,如何实现在 UISegmentedControl、UITabBar、UITableView 或 UICollectionView 中看到的粘性焦点选择? “粘性选择”是指在聚焦到容器时自动将焦点转移到最后一个聚焦/选定的项目。
UISegmentedControl + 其他人如何自己实现这个?我尝试检查 UISegmentedControl 并惊讶地发现它是一个大型可聚焦元素,而不是一组可聚焦片段。我不知道 UISegmentedControl 如何在给定架构的情况下在段之间切换焦点。
到目前为止,我的解决方法是:
在屏幕级别,保持每个粘性选择。例如,如果屏幕有两个自定义顶部菜单,则屏幕保持两个活动选择。覆盖 shouldUpdateFocus 以检测焦点更改到具有粘性选择的容器/菜单中。返回 false + 调用 setNeedsFocusUpdate 并结合重写 preferredFocusEnvironments 将焦点重定向到粘性/选定的子视图。
我的解决方案有效,但对于编写可自动维护粘性选择的可重用自定义 UI 并不令人满意。 Apple 能够制作几个这样的自定义 UI,所以我肯定缺少一些方法。
【问题讨论】:
标签: ios uikit focus tvos apple-tv