Quiero llamar childFunction() demostración ChildView pulsando el botón en la vista principal.
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()
}
}
Actualización: Gracias @RajaKishan, funciona, pero la necesito para trabajar, también de forma recursiva
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()
}
}
Tal vez no es el mejor ejemplo, pero la pregunta es, cómo forzar el botón para ejecutar la función de su niño después de que el usuario visitó correspondiente niño.
Como, en inicio cuando el usuario presiona el botón se imprime "Este punto de vista es de los Padres". Después de que el usuario viene a child1 al pulsar el botón imprimir "Este punto de vista es Child1" como así sucesivamente. Así, la función que el botón se ejecuta debe ser referenciados desde el último niño.
Actualización: Al final me escribió esta solución.
Actualización: He recibido comentarios, me pide una aclaración. No hay problema. Espero que ayude a alguien.:)
Aclaración: Yo no encierre el código en su totalidad, sólo un ejemplo sencillo. Pero yo necesitaba esto en mi aplicación de un árbol de menú generado: cuando cada elemento en el menú tiene o no tiene hijos. Pulsando sobre el objeto primario de usuario llega a los objetos secundarios. Y aquí me necesita para ser capaz de volver de un objeto hijo a padre, pero llamar a esto despedir a la función del objeto principal. Para esto he utilizado el siguiente código y se refirió a esta función para cada uno de los padres de objeto:
@Environment(\.presentationMode) var presentationMode
presentationMode.wrappedValue.dismiss()