Chcem pozvať, aby childFunction() demo ChildView stlačením tlačidla v materskej zobraziť.
import SwiftUI
struct ChildView: View {
func childFunction() {
print("I am the child")
}
var body: some View {
Text("I am the child")
}
}
struct ContentView: View {
var function: (() -> Void)?
var body: some View {
ChildView()
Button(action: {
self.function!()
}, label: {
Text("Button")
})
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Aktualizácia: Vďaka @RajaKishan, funguje to, ale musím sa pracovať aj rekurzívne
import SwiftUI
struct ContentView: View {
@State var text: String = "Parent"
var isNavigationViewAvailable = true
func function() {
print("This view is \(text)")
}
var body: some View {
VStack {
if isNavigationViewAvailable {
Button(action: {
function()
}, label: {
Text("Button")
})
}
if isNavigationViewAvailable {
NavigationView {
List {
NavigationLink("Child1") {
ContentView(text: "Child1", isNavigationViewAvailable: false)
}
NavigationLink("Child2") {
ContentView(text: "Child2", isNavigationViewAvailable: false)
}
NavigationLink("Child3") {
ContentView(text: "Child3", isNavigationViewAvailable: false)
}
}
}
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Asi nie je najlepšie vyzerajúcich príklad, ale otázka je, ako účinnosti tlačidlo spustiť funkciu je to dieťa po používateľa navštívili príslušné dieťa.
Ako na začiatku, keď používateľ stlačí tlačidlo vytlačí "Toto zobrazenie je Rodič". Po užívateľ prichádza do child1 tlačidlo stlačte by print "Toto zobrazenie je Child1" tak, ako je to na. Tak, funkcie, ktorá tlačidlo beží, by mali byť uvedené aj z posledného dieťaťa.
Aktualizácia: Na konci som napísal toto riešenie.
Aktualizácia: Dostal som spätnú väzbu, pýtať sa mi o objasnenie. Žiadny problém. Dúfam, že to bude niekto pomôcť.:)
Vysvetlenie: Nechcel som zahrnul celý kód, stačí použiť jednoduchý príklad. Ale potreboval som to v mojej implementácii strom-ako generované menu: pri každej položke v menu má alebo nemá svoje deti. Stlačením na materskej objekt užívateľ príde do podradené objekty. A tu som musel byť schopný vrátiť sa z dieťaťa objekt na materskej, ale tento hovor odmietnuť funkciu z nadradeného objektu. Ja som sa používa nasledujúci kód a uvedené na tejto funkcie na každý rodič objektu:
@Environment(\.presentationMode) var presentationMode
presentationMode.wrappedValue.dismiss()