web-dev-qa-db-fra.com

SwiftUI: NavigationDestinationLink déconseillé

Après avoir installé Xcode 11 beta 5 ce matin, j'ai remarqué que NavigationDestinationLink était déconseillé au profit de NavigationLink.

C'est également ce que Apple en dit dans les notes de version:

NavigationDestinationLink et DynamicNavigationDestinationLink sont obsolètes; leurs fonctionnalités sont désormais incluses dans NavigationLink. (50630794)

La façon dont j'utilise NavigationDestinationLink consiste à pousser par programmation une nouvelle vue dans la pile via self.link.presented?.value = true. Cette fonctionnalité ne semble pas être présente dans NavigationLink.

Une idée quelqu'un? Je préfère ne plus utiliser NavigationDestinationLink car il est obsolète ...

Je vous remercie!

PDATE: En fait, la méthode NavigationDestinationLink ne fonctionne plus, donc je suppose que nous n'avons plus aucun moyen de pousser par programmation?

MISE À JOUR 2:

NavigationLink(destination: CustomView(), isActive: $isActive) {
    return Text("")
}

Cela fonctionne mais lorsque vous passez isActive à true, toute mise à jour d'état déclenchera ce code et poussera encore et encore ... De plus, si vous le renvoyez à false, il affichera la vue . Non seulement les mises à jour, si vous définissez isActive sur true, cela poussera la vue (bien) et si nous appuyons sur le bouton de retour, il reviendra puis immédiatement poussera à nouveau car c'est toujours vrai. Jouer avec onAppear était mon espoir mais ça ne s'appelle pas quand on y revient ... Je ne sais pas comment on est censé l'utiliser.

5
Benjamin Clanet

Vous pouvez également utiliser NavigationLink (destination: tag: sélection)

NavigationLink(destination: MyModal(), tag: 1, selection: $tag) {
    EmptyView()
}

Donc, par programme, vous pouvez définir la balise sur 1 afin de pousser MyModal. Cette approche a le même comportement que celle avec la variable de liaison Bool, donc lorsque vous sautez la première fois, elle pousse la vue immédiatement, espérons qu'elle le corrigera dans la prochaine version bêta.

Le seul inconvénient que je vois avec cette approche, par rapport à DynamicNavigationDestinationLink, est que vous devez fournir une vue à NavigationLink, même si vous n'en avez pas besoin. J'espère qu'ils trouveront un moyen plus propre de nous permettre de pousser par programme.

1
Gualtiero Frigerio

La solution consiste à créer manuellement un bouton de retour personnalisé pour votre vue détaillée et afficher la vue détaillée.

.navigationBarItems(leading:
                Button(action: {
                    self.showDetail = false
                }) {
                    Image(systemName: "chevron.left").foregroundColor(.red)
                        .font(.system(size: 24, weight: .semibold))
                    Text("Back").foregroundColor(.red)
                    .font(.system(size: 19))
                }
            )
0
Karen Karapetyan

Réponse NavigationLink trouvée ici .

0
Rohit Makwana