Eu quero chamar a childFunction() demonstração ChildView pressionando o botão na view pai.
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()
}
}
Atualização: Obrigado @RajaKishan, ele funciona, mas eu preciso trabalhar também recursivamente
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()
}
}
Talvez não é o melhor exemplo, mas a questão é, como forçar o botão para executar a função de seu filho depois que o usuário visitou o filho correspondentes.
Como, no início quando o usuário pressiona o botão imprime "Este ponto de vista é Pai". Depois que o usuário se trata de child1 premir o botão deve imprimir "Este ponto de vista é Child1" como assim por diante. Assim, a função que o botão é executado deve ser referenciado a partir do último filho.
Atualização: No final, eu escrevi esta solução.
Atualização: Recebi feedback, pedindo-me esclarecimentos. Não há problema. Eu espero que ele vai ajudar alguém.:)
Esclarecimento: Eu não coloque todo o código, usei apenas um exemplo simples. Mas eu precisava disso em minha implementação de uma árvore gerada menu: quando cada item do menu tem ou não tem filhos. Pressionando o principal objeto de usuário vem em objetos filho. E aqui eu necessárias para ser capaz de voltar de um objeto filho para com o pai, mas chamar esta função de dispensar do objeto pai. Para isso eu usei o seguinte código e, que se refere a esta função, para cada objeto pai:
@Environment(\.presentationMode) var presentationMode
presentationMode.wrappedValue.dismiss()