tvOS UICollectionView Ruft den Indexpfad des aktuell fokussierten Objekts ab

8

Das ist also eine Art Noobish-Frage, aber ich kann einfach keine sehr einfache Möglichkeit finden, die indexPath des aktuell fokussierten Items zu finden.
Ich schaute mich um und hoffte, etwas sehr einfaches zu sehen, wie collectionView.indexPathOfCurrentlyFocusedItem , fand aber nichts in der Nähe. Also habe ich gegraben und versucht, etwas Ähnliches in UIFocusEnvironment , UIFocusUpdateContext zu finden, das versucht, die gewünschte Eigenschaft zu finden, aber gescheitert. Also, die einzige Lösung, die ich finden kann, besteht darin, alle sichtbaren Zellen zu durchlaufen und eine Zelle zu finden, deren fokussierte Eigenschaft auf true gesetzt ist.

Gibt es also eine einfachere und elegantere Möglichkeit, den indexPath des aktuell fokussierten Gegenstands zu finden? (Außer, dass es über die Delegate-Methode verfolgt und in der Eigenschaft des View-Controllers gespeichert wird)

    
xinatanil 26.09.2015, 20:26
quelle

4 Antworten

18

Sie können UIScreen property focusedView wie folgt für Folgendes verwenden:

%Vor%     
Antoine 30.09.2015 11:39
quelle
7

Verwenden Sie didUpdateFocusInContect - UICollectionViewDelegate

%Vor%

Dies wird den IndexPfad der Zelle zurückgeben, die fokussiert werden soll. Sie können auch versuchen:

%Vor%

Hängt davon ab, was Sie tun möchten.

    
Jeroen Bakker 28.09.2015 07:46
quelle
2

So habe ich das in shouldUpdateFocusInContext

erreicht

Lösung

%Vor%     
Jacksonkr 09.11.2015 16:57
quelle
2

Also, dein Ziel ist es, etwas zu tun, wenn du den Fokus auf eine Zelle unter tVOS verlierst und verlierst. Der Catch ist, dass Sie sich um andere UI-Elemente bewegen, und daher könnte der Kontext anders sein. Sie müssen in diesem Zusammenhang nur diejenigen UIs ändern, die Sie pflegen müssen.

Der richtige Ort für Ihre Implementierung ist func didUpdateFocusInContext (), wie folgt:

%Vor%

Jetzt verwenden wir den Fokuskoordinator, um unsere Logik anzuwenden:

  • Wenn das zuvor fokussierte Element UICollectionViewCell ist, müssen Sie den Fokus auf das nächste Element freigeben. Sie sollten sich nicht darum kümmern, was der nächste Gegenstand ist, weil es eine Sammelzelle sein könnte oder nicht. Zum Spaß, in diesem Fall, ändern wir den Rahmen auf 2. Dieser Wert könnte standardmäßig eingestellt werden.
  • Wenn das nächste fokussierte Element UICollectionViewCell ist, dann musst du damit umgehen, oder es wird ein Chaos ... Also, lass uns den Rahmen auf 5 setzen.

Wie Sie sehen, bietet didUpdateFocusInContext () einen generischen Ansatz für alle Ansichten in Ihrem aktuellen visuellen Kontext. Sie können den gleichen Ansatz für andere Benutzeroberflächenelemente anwenden.

Viel Spaß mit tvOS ...

    
Andrew Andreev 05.06.2016 10:06
quelle

Tags und Links