Je veux l'appeler childFunction() démonstration ChildView en appuyant sur le bouton dans la vue parent.
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()
}
}
Mise à jour: Merci @RajaKishan, il fonctionne, mais j'ai besoin qu'il fonctionne également de manière récursive
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()
}
}
Peut-être est n'est pas le meilleur exemple, mais la question est, comment faire pour forcer le bouton pour exécuter la fonction de l'enfant après que l'utilisateur a visité correspondant de l'enfant.
Comme, à commencer quand l'utilisateur appuie sur le bouton, il imprime "Ce point de vue est le Parent". Après que l'utilisateur vient à l'enfant1 appuyez sur le bouton devrait print "Ce point de vue est Enfant1" comme l'a si sur. Donc, la fonction de ce bouton exécute doit être référencé à partir du dernier enfant.
Mise à jour: En fin de compte, j'ai écrit cette solution.
Mise à jour: J'ai reçu des commentaires, à me demander des précisions. Pas de problème. J'espère que ça aidera quelqu'un.:)
Précisions: Je n'ai pas l'entourer de code, juste utilisé un exemple simple. Mais j'avais besoin de ça dans ma mise en œuvre d'un arbre généré menu: lors de chaque élément dans le menu a ou n'a pas ses enfants. En appuyant sur le parent de l'objet utilisateur vient dans les objets enfants. Et ici, j'ai besoin d'être en mesure de revenir d'un objet enfant à parent, mais l'appelle de rejeter la fonction de l'objet parent. Pour cela, j'ai utilisé le code suivant et renvoyé à cette fonction à chaque parent de l'objet:
@Environment(\.presentationMode) var presentationMode
presentationMode.wrappedValue.dismiss()