Я использую стандартный UICollectionView
с разделами. Мои ячейки выложены как сетка. Следующая ячейка в выбранном направлении фокусируется правильно, если пользователь перемещает фокус с помощью пульта Apple TV. Но если в сетке есть «пробел», механизм фокусировки по умолчанию перескакивает через разделы. Это делается для того, чтобы сфокусировать ячейку, которая может находиться в нескольких разделах, но находится в том же столбце.
Простой пример: есть 3 раздела. В первой секции 3 ячейки. Второй имеет 2 ячейки, а последний снова имеет 3 ячейки. См. следующее изображение:
Если зеленая ячейка сфокусирована и пользователь касается направления вниз, желтая ячейка становится сфокусированной, а второй раздел пропускается механизмом фокусировки.
Я хотел бы заставить его, чтобы никакие разделы не могли быть перепрыгнуты. Поэтому вместо того, чтобы фокусировать желтую ячейку, я хотел бы сфокусировать синюю ячейку.
Я узнал, что механизм Apple TV Focus внутренне работает как система сетки и что описанное поведение является поведением по умолчанию. Чтобы разрешить другие движения (например, по диагонали), нам нужно помочь механизму фокусировки, поместив невидимые UIFocusGuide
, которые могут перенаправить механизм фокусировки на preferredFocusedView
.
Итак, на следующем изображении есть одна невидимая красная направляющая фокуса, помещенная в пустое пространство секции UICollectionView
, которая перенаправляет фокус вниз на нужную синюю ячейку. Я думаю, что это было бы идеальным решением, в теории.
Но как мне добавить UIFocusGuide
s ко всем пустым местам UICollectionView
разделов? Я пробовал несколько вещей, но ничего не получилось. Возможно, добавьте его как представление декоратора, но это кажется неправильным. Или как дополнительные ячейки, но это ломает слой данных и не работают привязки ограничений.
Кто-нибудь знает, как добавить UIFocusGuide
s к UICollectionView
?
UIFocusGuide
. Но до сих пор не знаю, как этого добиться. Я также спрашивал на форумах Apple: forums.developer.apple.com/message/93020 Пожалуйста, сообщите мне, если вы нашли решение. - person Stefan Arn   schedule 15.01.2016