[SWIFT] Déléguez le motif entre les vues. J'ai également fait une transition de page d'exemple en utilisant NavigationLink.

ViewDelegatePattern (j'avais l'habitude d'écrire ViewController, mais celui-ci est meilleur en termes de nom)

Déléguez le motif entre les vues. Il s'agit également d'un exemple de transition de page utilisant NavigationLink.

Le référentiel est ici> https://github.com/dropcontrol/ViewControllerDelegatePattern Cet article lui-même est le même que README.md dans le référentiel.

TL;DR

Un modèle qui transmet des valeurs entre les vues. Deux vues sont préparées. Implémentation de deux modèles, l'un est passé de parent à enfant et l'autre est passé d'enfant à parent. Je pense qu'il existe d'autres moyens de transmettre des valeurs, mais c'est le schéma le plus élémentaire.

En passant de parent à enfant

Ajoutez ce qui suit à l'enfant SecondView.swift

let text: String = "Not Success" //Valeur initiale requise

Dans ce cas, comme il est appelé depuis le parent à l'aide du lien de navigation, la chaîne de caractères est passée au texte dans SecondView () enregistré dans la destination.

NavigationLink(
  destination: SecondView(delegate: self, text: "Sucess send message"),
  label: {
    Text("Go to SecondView")
  })

Le délégué sera expliqué dans le cas du passage de l'enfant suivant au parent, mais la destination de transition View et son délégué peuvent être appelés pour chaque destination de NavigationLink.

Lors de la transmission d'une valeur d'un enfant à un parent

Je pense que ce modèle est souvent utilisé. Il est implémenté avec le modèle de délégué.

  1. Implémentez le protocole délégué dans le SecondView.swift enfant.
protocol secondViewDelegate {
    func returnData(text: String)
}
struct SecondView: View {
    var delegate: secondViewDelegate?
  1. Appelez la fonction du protocole délégué à passer au parent avec l'action: of Button.
Button(action: {
  self.delegate?.returnData(text: "Success!!")
  self.presentation.wrappedValue.dismiss()
}, label: {
  Text("Try delegate")
})
  1. Ajoutez SecondViewDelegate dans ContentView.swift parent. Définissez également le délégué de la vue sur self dans la destination du lien de navigation. Il est pratique de pouvoir régler à ce moment.
struct ContentView: View, secondViewDelegate{
NavigationLink(
  destination: SecondView(delegate: self, text: "Sucess send message"),
  1. Utilisez «@ State» pour enregistrer la variable pour laquelle la surveillance de l'état a été transférée au système avec Property Wrapper.
@State var text: String = "not change yet"
  1. Décrivez le traitement dans la fonction de délégué
func returnData(text: String) {
  self.text = text
}

Revenir sans utiliser le bouton de retour avec le lien de navigation

@ Environment est une variable d'environnement de SwiftUI, qui peut être utilisée pour surveiller et modifier l'état de diverses manières. Créez une variable dans SecondView.swift ci-dessous.

@Environment(\.presentationMode) var presentation

Maintenant que vous avez la variable d'environnement presentationMode,

Button(action: {
  self.delegate?.returnData(text: "Success!!")
  self.presentation.wrappedValue.dismiss()

Vous pouvez fermer l'écran en appelant self.presentation.wrappedValue.dismiss (). C'est la même chose pour les autres transitions d'écran (par exemple, vue modale).

Cet article est détaillé sur «@ Environnement». https://qiita.com/1amageek/items/59c6bb32a6627b4fb712

Se sentir comme.

Recommended Posts

Déléguez le motif entre les vues. J'ai également fait une transition de page d'exemple en utilisant NavigationLink.
J'ai fait un exemple de la façon d'écrire un délégué dans Swift UI 2.0 à l'aide de MapKit
J'ai créé un système d'exemple MVC simple à l'aide de Spring Boot
[Rails] J'ai créé une fonction de brouillon en utilisant enum
J'ai créé un schéma de verrouillage à l'aide de la touche de volume avec l'application Android. Édition fragmentée
J'ai créé un Dockerfile pour démarrer Glassfish 5 en utilisant Oracle Java