Chci zavolat childFunction() demo ChildView stisknutím tlačítka v rodičovském pohledu.
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()
}
}
Aktualizace: Díky @RajaKishan, to funguje, ale potřebuju to funguje také rekurzivně
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()
}
}
Možná je není nejhezčí příklad, ale otázka je, jak vynutit na tlačítko pro spuštění funkce je dítě po uživatel navštívil odpovídající dítěte.
Jako na začátku, když uživatel stiskne tlačítko tiskne "Tento pohled je Rodič". Poté, co uživatel přijde na child1 tlačítka tisk by měl vytisknout "Tento pohled je Child1" jak tak na. Takže, funkci, kterou tlačítko běží, by měla být odkazoval se z poslední dítě.
Aktualizace: Nakonec jsem napsal to řešení.
Aktualizace: Dostal jsem zpětnou vazbu, ptát se mě na vysvětlení. Žádný problém. Doufám, že to pomůže někdo.:)
Upřesnění: Nevěděl jsem, uzavřete celý kód, stačí použít jednoduchý příklad. Ale potřeboval jsem to v mé implementaci strom-jako generované menu: když každá položka v menu má, nebo nemá své děti. Stisknutím tlačítka na mateřské objekt uživatel přijde do podřízené objekty. A tady musím být schopen se vrátit dítě objekt na mateřskou, ale říkat to zamítl funkce z nadřazeného objektu. Na to jsem použil následující kód a podle této funkce, aby každý rodič objektu:
@Environment(\.presentationMode) var presentationMode
presentationMode.wrappedValue.dismiss()