Реализация пользовательского поведения фокуса для UICollectionView на AppleTV

Я пытаюсь реализовать довольно простой пользовательский интерфейс на tvOS, и после нескольких сбоев кажется, что это невозможно.

У меня есть 2 просмотра коллекции с горизонтальной прокруткой.

  • 1-й - города
  • 2-й - варианты

Набор параметров одинаков для всех городов, но некоторые параметры могут быть отключены для некоторых городов. По крайней мере, один вариант доступен для каждого города.

Пользователь может выбрать город и вариант для него, сосредоточившись на конкретной ячейке. Текущий выбор виден на экране (см. Ярлыки под коллекциями)

Пример пользовательского интерфейса

То, что я пытаюсь сделать, это запомнить выбранный город / опцию, поэтому, когда я изменяю опцию между этими видами коллекции - ранее выбранный элемент становится фокусированным (выделенным). Это можно сделать с помощью remembersLastFocusedIndexPath флаг для UICollectionView но представление коллекции игнорирует отключенные ячейки.

Например, в прикрепленном проекте вариант 3 для Дублина отключен. Таким образом, если пользователь выбирает Лондон, затем выбирает вариант 3, затем перемещает фокус обратно в представление коллекции городов и меняет выбор на Дублин, тогда вариант 3 становится недоступным (isUserInteractionEnabled является false а также collectionView(_ collectionView:, canFocusItemAt indexPath:) возвращается false). Однако если remembersLastFocusedIndexPath Значение true - представление коллекции игнорирует все эти элементы и пытается сфокусировать отключенный элемент. На данный момент пользовательский интерфейс коллекции "сломался":

сломанный UICollectionView

Есть indexPathForPreferredFocusedView(in:) метод, но он срабатывает только один раз для предпочтительного UICollectionView хотя это не очевидно из документации Apple.

Есть ли способ написать "пользовательскую" логику для фокусировки ячеек? Что мне нужно реализовать для представления коллекции параметров, так это выбрать текущий выбранный параметр, если он доступен, или первый доступный параметр, если выбранный в данный момент параметр отключен каждый раз, когда он получает фокус. Наследование UICollectionView не должен быть способ решить это, поскольку он не должен знать о модели данных.

Здесь вы можете скачать тестовый проект

0 ответов

Другие вопросы по тегам