我想通过按父视图中的按钮来调用 childFunction() demo ChildView 。
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()
}
}
更新:
谢谢@RajaKishan,它可以工作,但我也需要它递归地工作
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()
}
}
也许这不是最好看的例子,但问题是,如何在用户访问相应的子项后强制按钮运行其子项的功能。
就像,在启动时,当用户按下按钮时,它会打印“此视图是父视图”。用户到达 child1 后,按下按钮应打印“This view is Child1”等。因此,按钮运行的函数应该从最后一个子级引用。
更新:
最后我写了this https://stackoverflow.com/questions/70119454/binding-void-in-contentview-previews/解决方案。
更新:
我收到反馈,要求我澄清。没问题。我希望它能帮助别人。:)
澄清:
我没有附上完整的代码,只是使用了一个简单的示例。但我在实现树状生成菜单时需要这个:当菜单中的每个项目有或没有其子项时。按下父对象用户进入子对象。在这里,我需要能够从子对象返回到父对象,但从父对象调用此解雇函数。为此,我使用了以下代码并将此函数引用到每个父对象:
@Environment(\.presentationMode) var presentationMode
presentationMode.wrappedValue.dismiss()