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.
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.
Je pense que ce modèle est souvent utilisé. Il est implémenté avec le modèle de délégué.
protocol secondViewDelegate {
func returnData(text: String)
}
struct SecondView: View {
var delegate: secondViewDelegate?
Button(action: {
self.delegate?.returnData(text: "Success!!")
self.presentation.wrappedValue.dismiss()
}, label: {
Text("Try delegate")
})
struct ContentView: View, secondViewDelegate{
NavigationLink(
destination: SecondView(delegate: self, text: "Sucess send message"),
@State var text: String = "not change yet"
func returnData(text: String) {
self.text = text
}
@ 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