ios - ViewController को विधिवत रूप से कैसे प्रस्तुत करें, और फिर एक कॉलबैक फ़ंक्शन/ब्लॉक चलाते हैं, ViewController को बिना किसी प्रतिनिधि के बहिष्कार के बाद?




swift uiviewcontroller (3)

आप एक कॉलबैक समापन करने के लिए अपने ChildVC एक संपत्ति जोड़ सकते हैं और जब आप बच्चा दृश्य नियंत्रक पेश करते हैं तो इसे सेट कर सकते हैं जब बच्चा दृश्य नियंत्रक खुद को खारिज कर देता है, तो वह पूर्णता वाले हैंडल को कॉल कर सकता है:

class ChildVC: UIViewController {        
    var completionHandler : ((childVC:ChildVC) -> Void)?

    func dismiss() {
        self.dismissViewControllerAnimated(true) {
            self.completionHandler?(childVC:self)
        }
    }
}

जब आप चाइल्डवैक उदाहरण प्रस्तुत करते हैं, तो आप पूर्ण हैंडलर प्रदान करते हैं:

let completionHandler:(ChildVC)->Void = { childVC in
    print("completed for \(childVC)")
}
childVC.completionHandler=completionHandler
self.presentViewController(childVC, animated: true, completion: nil)

मैं सिर्फ इतना जानता था कि स्क्रीन पर प्रदर्शित होने के लिए, बच्चे के नियंत्रक को स्क्रीन पर प्रदर्शित करने के लिए self.presentViewController(childVc, animated: true, completion: {}) के self.presentViewController(childVc, animated: true, completion: {}) लिए self.presentViewController(childVc, animated: true, completion: {}) को self.presentViewController(childVc, animated: true, completion: {}) कहते हैं। मैं वास्तव में कोड के एक ब्लॉक को चलाने के लिए चाहता हूं जो बच्चे के दृश्य नियंत्रक के एनीमेशन के बाद प्रदर्शित होने के बाद समाप्त हो जाना समाप्त हो रहा है। मैं ऐसा कैसे कर सकता हूं, ऐसा करने के लिए प्रतिनिधि का इस्तेमाल करने के लिए प्राथमिकता से बचने के लिए?

संपादित करें: मैं इस तरह से प्रस्तुत (बच्चे) दृश्य नियंत्रक से इसे self.presentingViewController.dismissViewControllerAnimated (true) {} : self.presentingViewController.dismissViewControllerAnimated (true) {} , लेकिन समस्या यह है कि बच्चे को देखने नियंत्रक मनमाना पृष्ठ से प्रस्तुत किया जा सकता है, और बच्चे को खारिज करने के बाद माता-पिता (प्रस्तुत करना) दृश्य नियंत्रक को अलग-अलग बातें करना पड़ता है अगर मैं कॉल में बच्चे को वापस लाता हूँ, तो मैं इसे अलग-अलग माता पिता के साथ अलग-अलग चीज़ नहीं कर सकता।

उदाहरण के लिए, अगर मैं लॉगिन स्क्रीन में खारिज होने के बाद लॉगिन स्क्रीन में मॉडेल के रूप में लॉगिन फॉर्म पर कॉल करता हूं, तो मैं बाद में टिप्पणी अनुभाग प्रदर्शित करना चाहता हूं। लेकिन अगर प्रवेश प्रपत्र उत्पाद स्क्रीन से मॉड्यूल प्रदर्शित होता है, तो मैं बाद में गाड़ी में उत्पाद के साथ उपयोगकर्ता के कार्ट को प्रदर्शित करना चाहता हूं। यदि प्रतिनिधि के बिना यह करना असंभव है, तो मुझे अभी भी प्रतिनिधि समाधान में रुचि है।


आप प्रस्तुत किए गए ViewController में एक कॉलबैक ब्लॉक बना सकते हैं जैसे @property(nonatomic,copy)void (^onDimissed)();
और बाद में प्रस्तुत दृश्य नियंत्रक कॉल
[self dismissViewControllerAnimated:YES completion:^{ if (self.onDismissed) { self.onDismissed(); } }];
तो आप ब्लॉक में किसी भी पैरामीटर लौटा सकते हैं
और यह मत भूलो
SomeController *ctr = [[UIViewController alloc] init]; ctr.onDimissed = ^{ //some your implementation };


यदि आप self.presentingViewController.dismissViewControllerAnimated (true) {} इस वापसी शून्य का उपयोग करते हैं, तो इसका मतलब है कि यह सभी ओएस का समर्थन नहीं करता है, तो बस नीचे दिए गए कोड का उपयोग करें,

self.dismissViewControllerAnimated(true, completion: {
   //Put your code
});

यदि आप ViewController खारिज करते ViewController तो आप किसी भी फ़ंक्शन को अपने कोड को पूर्ण हैंडलर में डाल सकते हैं।

आशा है कि इसकी मददगार





modal-dialog