Chcę wywołać childFunction() demo childView, naciskając przycisk w odbiorniku widoku.
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()
}
}
Odśwież: Dziękuję @RajaKishan, to działa, ale ja chcę, aby on pracował także rekurencyjnie
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()
}
}
Być może nie jest to najpiękniejszy przykład, ale pytanie brzmi, jak zrobić przycisk uruchom funkcję jej elementu podrzędnego po tym, jak użytkownik odwiedził odpowiedniej dziecka.
Na przykład, po uruchomieniu, gdy użytkownik kliknie przycisk, drukuje "To przedstawienie jest nadrzędnym". Po tym, jak użytkownik przejdzie do child1, naciśnięcie przycisku powinno się wyprowadzić "To przedstawienie jest Child1", jak i tak dalej. W ten sposób, na funkcję, którą uruchamia przycisk, należy odwołać z ostatniego elementu podrzędnego.
Odśwież: W końcu napisałem to rozwiązanie.
Odśwież: Dostałem informację zwrotną, w której miałem dać wyjaśnienia. Bez problemów. Mam nadzieję, że to komuś pomoże.:)
Rozjaśnianie: Nie obejmował cały kod w całości, po prostu wykorzystał prosty przykład. Ale było mi to potrzebne przy realizacji drzewo wygenerowanego przez menu: kiedy u każdego elementu w menu lub jego elementów podrzędnych. Po kliknięciu na obiekt nadrzędny użytkownik przechodzi do obiektów podrzędnych. I tu trzeba było mieć możliwość powrotu od obiektu podrzędnego do nadrzędnego, ale wywołać tę funkcję odchylenia od obiektu nadrzędnego. Użyłem do tego poniższy kod i powołał na tę funkcję dla każdego obiektu nadrzędnego:
@Environment(\.presentationMode) var presentationMode
presentationMode.wrappedValue.dismiss()