我想通過按下父視圖中的按鈕來呼叫 childFunction() 演示 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 后,按下按鈕應該列印“這個視圖是 Child1”等等。因此,按鈕運行的函式應該從最后一個子節點參考。
uj5u.com熱心網友回復:
您可以為 ChildView 創建一個物件。
struct ChildView: View {
func childFunction() {
print("I am the child")
}
var body: some View {
Text("I am the child")
}
}
struct ContentView: View {
let childView = ChildView()
var body: some View {
childView
Button(action: {
childView.childFunction()
}, label: {
Text("Button")
})
}
}
編輯:對于串列,您可以使用模型的陣列并按索引呼叫目標函式。
這是一個簡單的子父示例。
struct ChildView: View {
var text: String
func childFunction() {
print("This view is \(text)")
}
var body: some View {
Text("I am the child")
}
}
struct ContentView55: View {
@State private var arrData = [Model(title: "Child1", destination: ChildView(text: "Child1")),
Model(title: "Child2", destination: ChildView(text: "Child2")),
Model(title: "Child3", destination: ChildView(text: "Child3"))]
var body: some View {
VStack {
Button(action: {
arrData[1].destination.childFunction()
}, label: {
Text("Button")
})
NavigationView {
SwiftUI.List(arrData) {
NavigationLink($0.title, destination: $0.destination)
}
}
}
}
}
struct Model: Identifiable {
var id = UUID()
var title: String
var destination: ChildView
}
注意:您需要為行建立索引才能呼叫子函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/364961.html
