2014-11-20 13 views
7

द्वारा प्रस्तुत मैं एक समस्या एक अनसुलझे तैनात सवाल से मिलता-जुलता में चल रहे हो रहे हैं: UIAlertController dismissing his presentingViewControllerखारिज UIAlertController एक मॉडल दृश्य नियंत्रक

मैं एक सामान्य UIViewController की चोटी पर एक मॉडल दृश्य नियंत्रक पेश कर रहा हूँ। तब मैं उस मोडल व्यू कंट्रोलर पर एक चेतावनी पॉप अप कर रहा हूं। जब मैं अलर्ट (नीचे दिए गए कोड से उत्पन्न) को खारिज करने के लिए "ठीक" दबाता हूं, तो मोडल व्यू कंट्रोलर भी खारिज कर दिया जाता है।

UIAlertAction *ok = [UIAlertAction actionWithTitle:@"OK" 
              style:UIAlertActionStyleDefault 
              handler:^(UIAlertAction *action{ 
                [self dismissViewControllerAnimated: YES completion: nil];}]; 

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Sign up problem." 
                   message:@"Some fields are empty. Please check your inputs and try again." 
                 preferredStyle:UIAlertControllerStyleAlert]; 
[alert addAction:ok]; 
[self presentViewController:alert animated:YES completion:nil]; 

मैं केवल अलर्ट को कैसे खारिज कर सकता हूं?

मुझे एहसास है कि मैं नेविगेशन कंट्रोलर प्रकार सेटअप का उपयोग करके और नेविगेशन बार को छुपाकर इस समस्या से बच सकता हूं, इसलिए मुझे मोडल व्यू कंट्रोलर के समान महसूस होता है, लेकिन यह मूर्खतापूर्ण लगता है। धन्यवाद।

उत्तर

21

बटन हैंडलर में self dismissViewController पर कॉल न करें। यह विशेष रूप से बताता है कि आप दृश्य नियंत्रक को खारिज करना चाहते हैं।

आपको अलर्ट को खारिज करने की आवश्यकता नहीं है। यह स्वचालित रूप से खुद को खारिज कर देगा। बटन हैंडलर में आपको केवल एक ही चीज करना चाहिए जो आपको चाहिए। अगर आपको कुछ भी करने की ज़रूरत नहीं है तो कुछ भी मत करो।

यदि आपका चेतावनी बस एक संदेश है और आप किसी भी कार्रवाई करने के लिए की जरूरत नहीं है, बस इस कार्य करें:

UIAlertAction *ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; 
+0

धन्यवाद। बहुत सराहना की, और वास्तव में दोनों व्यवहार उपयोगी हैं। –

0

आपको बटन हैंडलर में किसी भी तरह से UIAlertController मैन्युअल रूप से खारिज करने या निकालने की आवश्यकता नहीं है - यह स्वयं ही करता है।

बस dismissViewControllerAnimated:completion: पर कॉल को हटा दें।

+0

लेकिन अगर आप वास्तव में चाहते हैं विशिष्ट कारणों के लिए करने के लिए। प्रोग्रामेटिक रूप से इसे खारिज करने का एक तरीका होना चाहिए। उदाहरण के लिए पुराने '' 'UIAlertView''' के साथ आप प्रोग्रामेटिक रूप से इसे खारिज/छुपा सकते हैं। – Supertecnoboff

+0

@Supertechnoboff: मुझे लगता है कि आप केवल '[स्वयं को खारिज कर सकते हैं नियंत्रकएनिएटेड: समापन:] '। हालांकि यकीन नहीं है। – Linuxios

संबंधित मुद्दे