कैसे चलाने के लिए बच्चे समारोह माता-पिता से?

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

हाय. उत्तर के लिए धन्यवाद । यह काम करता है. लेकिन के मामले में पुनरावर्ती संरचना देखें जब ContentView है ContentView बच्चे के माध्यम से बनाया NavigationLinks, यह कैसे हल किया जा सकता है के रूप में मान टाइप नहीं कर सकता है एक संग्रहीत संपत्ति है कि बारी बारी से होता है यह ?
Degtiarev Aleksei

@DegtiarevAleksei आप कर सकते हैं जोड़ने के लिए कृपया एक उदाहरण के लिए अपने सवाल है?
Raja Kishan

अद्यतन सवाल
Degtiarev Aleksei

@DegtiarevAleksei मैं जोड़ा गया संपादित हिस्सा है । यह उपयोगी हो सकता है.
Raja Kishan

जवाब के लिए धन्यवाद, लेकिन मैं के बाद संकलित बटन हमेशा रिटर्न "यह दृश्य है Child2"
Degtiarev Aleksei

@DegtiarevAleksei यह है, क्योंकि मैं निर्धारित किया है, सूचकांक 1 (arrData[1]) में बटन कार्रवाई की है । पढ़ें मेरे ध्यान दें ।
Raja Kishan

यह काम नहीं हो सकता है के रूप में की उम्मीद है, क्योंकि विचारों में SwiftUI हैं structs, जिसका मतलब है कि वे द्वारा पारित कर रहे हैं मूल्य, इस प्रकार की नकल की हर बार वे वितरित कर रहे हैं. अंत में, तुम अंत के साथ एकाधिक, अलग ChildView उदाहरण है, तो आप अंत हो सकता है बच्चे को फोन समारोह पर एक और दृश्य की तुलना में आप की उम्मीद करने के लिए.
Cristik

@Cristik हाँ, मैं यह सही लगता है कि करने के लिए कई उदाहरण बनाने के लिए प्रत्येक बच्चे को देखने के लिए कॉल. क्योंकि यह अलग ढंग से व्यवहार करता है के लिए प्रत्येक घटना ।
Raja Kishan

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

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

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में