如何运行的儿童能从父母?

0

的问题

我想要呼叫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()
    }
}

也许是不是最好看的例子,但问题是,如何力的按钮运行的功能的儿童之后的用户访问过的相应的孩子。

在开始的时候户按下按钮,它印刷品"这种观点是父"。 之后用户候级1按下按钮应该打印的"这一看级1"为等。 因此,功能,按钮运行应该被引用最后一个孩子。

更新: 在结束我写了 这个 的解决方案。

更新: 我接收到的反馈意见,要求我作出澄清。 没有问题。 我希望它将帮助人:)

澄清: 我没有将整个码,只有用一个简单的例子。 但我需要这在我的执行情况的一棵树的-像这样产生的菜单:当中的每个项目的菜单有或不具有其儿童。 按父母的对象用户进入的儿童的对象。 在这里我需要的是能够回来的儿童的对象父母,但称这一解雇职能从父母的对象。 为此,我使用了下列代码并提到这一功能为每个家长的对象:

@Environment(\.presentationMode) var presentationMode
 presentationMode.wrappedValue.dismiss()
ios swift swiftui
2021-11-24 05:44:05
1

最好的答案

1

你可以创建一个对象一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
}

注:需要指数进行的呼叫孩子的功能。

2021-11-24 07:34:52

嗨 谢谢你的回答。 它的工作。 但在这种情况下递归的结构图内容查看当有内容查看的孩子创建的通过NavigationLinks,如何可以解决,因为价值的类型不可能有储存的财产,递归包含?
Degtiarev Aleksei

@DegtiarevAleksei你可以请一个例子到你的问题吗?
Raja Kishan

更新的问题
Degtiarev Aleksei

@DegtiarevAleksei我已经加入的编辑的一部分。 这可能是有帮助的。
Raja Kishan

谢谢你的回答,但之后,我编制了按钮总是返回"这种观点是Child2"
Degtiarev Aleksei

@DegtiarevAleksei这是因为我们设定的指标1(arrData[1])在按钮行动。 读我的注意。
Raja Kishan

这可能不是预期的工作,因为意见中SwiftUI都结构,这意味着它们传递的价值,因此可复制的每一次他们分发。 在结束时,你结束了与多个不同的 ChildView 实例,所以你可能最终呼吁该儿童的功能另一种观点认为一个比你期望。
Cristik

@Cristik是的,我认为这是正确的创建多个实例,对每个儿童图呼叫。 因为它的行为以不同的方式为每个事件的发生。
Raja Kishan

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................