Как в пользовательском элементе управления реализовать липкий выбор фокуса, как это видно в UISegmentedControl, UITabBar, UITableView или UICollectionView? Под «закрепленным выделением» я подразумеваю автоматическое переключение фокуса на последний сфокусированный / выбранный элемент при фокусировке в контейнер.
Как UISegmentedControl + другие реализуют это самостоятельно? Я попытался проверить UISegmentedControl и с удивлением обнаружил, что это один большой фокусируемый элемент, а не группа фокусируемых сегментов. Я не смог выяснить, как UISegmentedControl может переключать фокус между сегментами, учитывая его архитектуру.
Пока что у меня есть обходной путь:
На уровне экрана поддерживайте каждый липкий выбор. Например, если на экране есть два пользовательских верхних меню, экран поддерживает два активных выбора. Переопределите shouldUpdateFocus, чтобы обнаружить изменения фокуса в контейнере / меню с липким выбором. Возврат false + вызов setNeedsFocusUpdate в сочетании с переопределением предпочитаемых предпочтений для фокуса, чтобы вместо этого перенаправить фокус на липкое / выбранное подпредставление.
Мое решение работает, но неудовлетворительно для написания настраиваемых пользовательских интерфейсов многократного использования, которые автоматически поддерживают липкие выделения. Apple удалось создать несколько таких пользовательских интерфейсов, поэтому я должен упустить какой-то метод.