Muster zwischen Ansichten delegieren. Es ist auch ein Beispiel für einen Seitenübergang mit NavigationLink.
Das Repository befindet sich hier> https://github.com/dropcontrol/ViewControllerDelegatePattern Dieser Artikel selbst entspricht README.md im Repository.
TL;DR
Ein Muster, das Werte zwischen Ansichten übergibt. Es werden zwei Ansichten vorbereitet. Es wurden zwei Muster implementiert, eines von Eltern zu Kind und das andere von Kind zu Eltern. Ich denke, es gibt andere Möglichkeiten, Werte zu übergeben, aber dies ist das grundlegendste Muster.
Fügen Sie dem untergeordneten Element SecondView.swift Folgendes hinzu
let text: String = "Not Success" //Anfangswert erforderlich
In diesem Fall wird die Zeichenfolge an den Text in SecondView () übergeben, der im Ziel registriert ist, da sie vom übergeordneten Element über den Navigationslink aufgerufen wird.
NavigationLink(
destination: SecondView(delegate: self, text: "Sucess send message"),
label: {
Text("Go to SecondView")
})
Der Delegat wird erklärt, wenn er vom folgenden untergeordneten Element an das übergeordnete Element übergeben wird. Die Übergangszielansicht und ihr Delegat können jedoch für jedes Ziel von NavigationLink aufgerufen werden.
Ich denke, dieses Muster wird oft verwendet. Es wird mit dem Delegatenmuster implementiert.
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
ist eine Umgebungsvariable von SwiftUI, mit der der Status auf verschiedene Arten überwacht und geändert werden kann. Erstellen Sie unten in SecondView.swift eine Variable.
@Environment(\.presentationMode) var presentation
Nachdem Sie die Umgebungsvariable präsentationMode haben,
Button(action: {
self.delegate?.returnData(text: "Success!!")
self.presentation.wrappedValue.dismiss()
Sie können den Bildschirm schließen, indem Sie "self.presentation.wrappedValue.dismiss ()" aufrufen. Dies gilt auch für andere Bildschirmübergänge (z. B. modale Ansicht).
Dieser Artikel befasst sich ausführlich mit @ Environment
.
https://qiita.com/1amageek/items/59c6bb32a6627b4fb712
Fühle mich wie.
Recommended Posts