어떻게 아이를 실행하는 기능에서 부모입니까?

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()
    }
}

아마 최고의 보고를 들어,하지만 질문가,방법을 강제로 실행 버튼을 기능의 그 후 아이 방문한 사용자가 해당 아이입니다.

음에 시작할 때 사용자가 버튼을 누르면 그것을 인쇄"이 보기에는 부모". 후자 child1 버튼을 눌러 인쇄해야 합니다"이 보는 Child1 으로"그렇다. 그래서,함수는 버튼을 실행해야에서 참조하는 마지막 아이입니다.

업데이트: 끝에서 썼는데 솔루션입니다.

업데이트: 을 받았 의견을 묻고 나를 대체할 수 없습니다. 아무 문제 없습니다. 나가겠습니다.누군가 있습니다.:)

설명: 지 않았다 묶 코드를 사용한 간단한 예제입니다. 그러나 나는 데 필요한이 나의 구현 트리 생성되는 메뉴가:면 각 항목에서 메뉴가 있거나 없는 그 아이들입니다. 에 누르면 부모 개체가 사용자 제공으로 자식 개체. 그리고 여기에 내가 필요할 수 있에서 돌아온 자식 개체 부모이지만,이를 해제 기능에서 부모 개체입니다. 이를 위해 내가 사용하는 다음 코드를 참조하여 이 기능을 각 부모 개체:

@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ý
..................................................................................................................