Üst görünümdeki düğmeye basarak childFunction () demo ChildView çağırmak istiyorum.
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()
}
}
Güncelleme: Teşekkürler @ RajaKishan, işe yarıyor, ama yinelemeli olarak da çalışmasına ihtiyacım var
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()
}
}
Belki de en iyi görünen örnek değildir, ancak soru, kullanıcı ilgili çocuğu ziyaret ettikten sonra düğmenin alt öğesinin işlevini çalıştırmaya nasıl zorlanacağıdır.
Örneğin, kullanıcı düğmeye bastığında başlangıçta "Bu görünüm Üst Düzeydir"yazdırır. Kullanıcı child1'e geldikten sonra düğmeye basıldığında "Bu görünüm Child1'dir" gibi yazdırılmalıdır. Bu nedenle, düğmenin çalıştığı işleve son alt öğeden başvurulmalıdır.
Güncelleme: Sonunda bu çözümü yazdım.
Güncelleme: Açıklama yapmamı isteyen geri bildirim aldım. Sorun değil. Birileri yardımcı olur umarım.:)
Açıklama: Tüm kodu içine almadım, sadece basit bir örnek kullandım. Ancak, ağaç benzeri oluşturulmuş bir menü uygulamamda buna ihtiyacım vardı: menüdeki her öğenin çocukları olduğunda veya olmadığında. Üst nesneye basıldığında, kullanıcı alt nesnelere girer. Ve burada bir alt nesneden ebeveyne geri dönebilmem gerekiyordu, ancak bu görevden alma işlevini üst nesneden çağırdım. Bunun için aşağıdaki kodu kullandım ve bu işlevi her bir üst nesneye yönlendirdim:
@Environment(\.presentationMode) var presentationMode
presentationMode.wrappedValue.dismiss()