OK, si j'ai un J'ai essayé de créer un sans succès. P> Y a-t-il un moyen de faire ça? p> p> uiviewcontroller Code> Je peux faire une vue axée sur TVOS si j'utilise cette "Préférences préféréesView, mais qu'en est-il de la première cellule d'une vision de l'UICOLLECTION? Comment puis-je faire ça?
uicollectionviewcell code> sous-classe et avez la méthode p>
4 Réponses :
Vous devez ajouter cette méthode UicollectionViewDelegate et toute logique requise si vous ne souhaitez pas retourner vrai dans certains cas
func collectionView(collectionView: UICollectionView, shouldUpdateFocusInContext context: UICollectionViewFocusUpdateContext) -> Bool { return true }
J'ai cette méthode en place mais maintenant comment puis-je concentrer une cellule?
Demandez-vous comment concentrer une cellule "spécifique"? Votre question dit la "première cellule". La méthode ci-dessus dans mon application met l'accent sur la première cellule. Mais si vous avez plusieurs articles concentrables à votre vue, il peut nécessiter une autre solution.
Non, je veux dire la première cellule. Cela ne fonctionne pas pour moi pour une raison quelconque. BTW, pourquoi cette méthode devrait-elle fonctionner s'il n'y a rien de mentionner la première cellule? Je ne suis pas sûr que je m'explique bien. Ce que je veux, c'est le cas: la collectionViewController apparaît et la première cellule est concentrée (je veux dire d'énormes taille d'énorme, car une cellule ciblée est censée être dans TVOS).
Peut-être publier votre code de contrôleur ici. Cela fonctionne bien pour moi et affiche la première cellule focalisée et dans le simulateur, je peux déplacer la flèche droite pour naviguer dans mes cellules de vue de la collection. Avez-vous supprimé votre méthode "PreferredFocusedView"?
Cette méthode n'est pas ce que les directives se concentrent sur un élément particulier; C'est plus un moyen de "veto" permettant de se concentrer quelque part. Si vous ne mettez pas du tout cette méthode, c'est la même chose que de la mettre en œuvre pour toujours retourner vrai.
Merci Justin - cela a plus de sens maintenant en fonction de votre réponse.
Le chemin "Focus préférés" fonctionne avec conceptuellement, il existe une "chaîne" d'objets à partir de la fenêtre de votre application, en descendant des contrôleurs d'affichage et des vues, jusqu'à ce que la chaîne se termine à une vue mise au point. Cette vue à la fin est ce qui sera ciblé lorsque votre application lance ou si la mise au point doit être réinitialisée (par exemple, si la vue actuellement ciblée est supprimée de la hiérarchie de vue, Uikit devra choisir une autre vue pour devenir focalisée) . La méthode Par exemple, Toutefois, Si la vue de la collection de votre contrôleur d'affichage n'est pas la vue à partir de là, la vue de la collection guidera la chaîne vers la chaîne vers le cellule spécifique. p> p> PREFERDREDREDREDREDREDREDREDREDREDFOGUEVIEW CODE> est la façon dont vous définissez la chaîne.
uiwindow code> Implements
PréférencesFocususeview code> Pour renvoyer la vue ciblée préférée du
RootViewController code>. Dans l'Abstrait, T fait quelque chose comme ceci: p>
uiviewController code> implémente
préféréfocususeview code> Pour retourner son
Voir < / code> propriété.
uIView code> se retourne simplement. p>
uicollectionview code> implémente
préféréfocuseview code> différemment: Dans le cas le plus simple, il renvoie la première cellule . Donc, cette partie de ce que vous voulez est déjà fait pour vous. Si le focus ne bouge pas dans la première cellule de votre collection, alors quelque chose de plus haut dans la "chaîne" est le problème. P>
Code> Propriété du contrôleur de vue, vous devez alors guider la chaîne de mise au point vers la collection vous-même: p>
Maintenant nous parlons. Je me demande pourquoi Apple n'embauche jamais de gens comme vous pour écrire leur documentation. Au lieu de cela, ils écrivent des gens qui détestent l'écriture. PARFAIT! MERCI!
Si vous obtenez des données de certains services, n'oubliez pas d'écrire [Self SetNeedsFocusupdate]; Après la vision de CollectionView ReloadData / ReloadSection.
Toute directive sur le changement de manière programmatique Quelle cellule est axée sur une vue de collection?
Vous pouvez utiliser cette méthode, Apple Documentation
func indexPathForPreferredFocusedView(in collectionView: UICollectionView) -> IndexPath? { return IndexPath(item: self.datasourceArray.count, section: 0) }
J'ai comme une réponse mise à jour comme (UIView *) PreferredredredfocusedView est devenue obsolète depuis TVOS 10 et il existe également un moyen très facile d'obtenir la première cellule et même la dernière cellule concentrée par défaut
- (NSArray<id<UIFocusEnvironment>> *)preferredFocusEnvironments { return @[myCollectionView.visibleCells.lastObject]; }