Ich verwende einen Standard UICollectionView
mit Abschnitten. Meine Zellen sind wie ein Gitter ausgelegt. Die nächste Zelle in einer ausgewählten Richtung wird korrekt fokussiert, wenn der Benutzer den Fokus mit der Apple TV-Fernbedienung bewegt. Wenn es jedoch eine "Lücke" im Raster gibt, springt die Standard-Fokus-Engine über Abschnitte. Dies dient dazu, eine Zelle zu fokussieren, die mehrere Abschnitte entfernt sein kann, sich jedoch in derselben Spalte befindet.Benutzerdefinierte Fokus-Motor-Verhalten für UICollectionView
Einfaches Beispiel: Es gibt 3 Abschnitte. Der erste Abschnitt hat 3 Zellen. Der zweite hat 2 Zellen und der letzte hat wieder 3 Zellen. Siehe folgendes Bild:
Wenn die grüne Zelle konzentriert und berührt der Benutzer die Abwärtsrichtung, wird die gelbe Zelle fokussiert und Abschnitt zwei wird durch den Fokus Motor übersprungen.
Ich möchte es zwingen, dass keine Abschnitte übersprungen werden können. Anstatt die gelbe Zelle zu fokussieren, möchte ich die blaue Zelle fokussieren.
Ich habe gelernt, dass die Apple TV Focus-Engine intern wie ein Grid-System funktioniert und dass das beschriebene Verhalten das Standardverhalten ist. Um andere Bewegungen (z. B. diagonal) zuzulassen, müssen wir der Fokus-Engine helfen, indem wir unsichtbare UIFocusGuide
s platzieren, die die Fokus-Engine zu einer preferredFocusedView
umleiten können.
In der folgenden Abbildung befindet sich ein unsichtbarer roter Fokus-Guide, der in den leeren Bereich eines UICollectionView
-Bereichs platziert wird, der den Down-Fokus auf die gewünschte blaue Zelle umlenkt. Ich denke, das wäre die perfekte Lösung in der Theorie.
Aber wie würde ich hinzufügen UIFocusGuide
s auf alle leeren Räume von UICollectionView
Abschnitte? Ich habe mehrere Dinge ausprobiert, aber nichts hat funktioniert. Vielleicht fügen Sie es als eine Dekorationsansicht hinzu, aber das scheint falsch zu sein. Oder als zusätzliche Zellen, aber das bricht die Datenschicht und die Constraints-Anker funktionieren nicht.
Hat jemand eine Idee, wie man UIFocusGuide
s zu einem UICollectionView
hinzufügt?
Das gleiche Problem gefunden werden. Haben Sie versucht, collectionView zu überschreiben: canFocusItemAtIndexPath und false an gelbe Zelle zurückgeben? –
Nein, habe ich nicht. Aber ich denke, das könnte ein wenig Durcheinander verursachen, denn die Zellen sollten fokussierbar sein. Ich bevorzuge immer noch die 'UIFocusGuide' Technik. Aber ich weiß immer noch nicht, wie ich es erreichen kann. Ich fragte auch in den Apple-Foren: https://forums.developer.apple.com/message/93020 Bitte informieren Sie mich, wenn Sie eine Lösung gefunden haben. –