[SWIFT] Muster zwischen Ansichten delegieren. Ich habe auch einen Beispielseitenübergang mit NavigationLink durchgeführt.

ViewDelegatePattern (Ich habe früher ViewController geschrieben, aber dieser ist in Bezug auf den Namen besser)

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.

Beim Übergang vom Elternteil zum Kind

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.

Wenn Sie einen Wert von einem Kind an ein Elternteil übergeben

Ich denke, dieses Muster wird oft verwendet. Es wird mit dem Delegatenmuster implementiert.

  1. Implementieren Sie das Delegatenprotokoll in der untergeordneten Datei SecondView.swift.
protocol secondViewDelegate {
    func returnData(text: String)
}
struct SecondView: View {
    var delegate: secondViewDelegate?
  1. Rufen Sie die Funktion des Delegatenprotokolls auf, das mit der Aktion: of Button an das übergeordnete Protokoll übergeben werden soll.
Button(action: {
  self.delegate?.returnData(text: "Success!!")
  self.presentation.wrappedValue.dismiss()
}, label: {
  Text("Try delegate")
})
  1. Fügen Sie SecondViewDelegate in der übergeordneten ContentView.swift hinzu. Legen Sie außerdem den Delegaten der Ansicht im Navigationslink-Ziel auf "Selbst" fest. Es ist bequem, zu diesem Zeitpunkt einstellen zu können.
struct ContentView: View, secondViewDelegate{
NavigationLink(
  destination: SecondView(delegate: self, text: "Sucess send message"),
  1. Verwenden Sie "@ State", um die Variable zu registrieren, für die die Zustandsüberwachung mit Property Wrapper an das System übertragen wurde.
@State var text: String = "not change yet"
  1. Beschreiben Sie die Verarbeitung in der Delegatenfunktion
func returnData(text: String) {
  self.text = text
}

Kehren Sie zurück, ohne die Zurück-Taste mit Navigationslink zu verwenden

@ 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

Muster zwischen Ansichten delegieren. Ich habe auch einen Beispielseitenübergang mit NavigationLink durchgeführt.
Ich habe ein Beispiel erstellt, wie ein Delegat in Swift UI 2.0 mit MapKit geschrieben wird
Ich habe mit Spring Boot ein einfaches MVC-Beispielsystem erstellt
[Rails] Ich habe eine Entwurfsfunktion mit enum erstellt
Ich habe mit der Lautstärketaste mit der Android-App ein Sperrmuster erstellt. Fragment Edition
Ich habe eine Docker-Datei erstellt, um Glassfish 5 mit Oracle Java zu starten