2012-03-26 9 views
26

आप एक पॉपओवर खारिज करने के लिए चाहते हैं - पॉपओवर के contentViewController भीतर उदाहरण के लिए, एक बटन से आप चाहिए -अपनी सामग्री ViewController के भीतर से एक UIPopoverController को खारिज कर रहा है?

  1. पॉपओवर के लिए एक संदर्भ बनाएं जो यह
  2. बनाएं बनाता है दृश्य नियंत्रक द्वारा आयोजित होने वाले contentViewController से एक सूचना मालिक दृश्य नियंत्रक पता है कि यह खारिज कर दिया जाना चाहिए, या एकांतर एक ही उद्देश्य
  3. अधिसूचना या प्रतिनिधि संदेश भेजें जब पॉपओवर खारिज कर दिया करने के लिए
  4. कॉल के लिए तैयार है के लिए एक प्रतिनिधि बनाने के लिए dismissPopover:animated जब नोटिफ़िका tion या प्रतिनिधि विधि
  5. कहा जाता है

इस बीच, एक UIViewController से आप मोडल दृश्य नियंत्रक, जनक दृश्य नियंत्रक, नेविगेशन नियंत्रक, विभाजित दृश्य नियंत्रक, टैब बार नियंत्रक, खोज प्रदर्शन नियंत्रक का उपयोग कर सकते, बाल दृश्य नियंत्रक, प्रस्तुत करने वाले दृश्य नियंत्रक, और प्रस्तुत दृश्य नियंत्रक।

क्या पॉपओवर की सामग्री व्यू कंट्रोलर से ऐसा करने का कोई बेहतर तरीका है?

उत्तर

29

दुर्भाग्यवश, आपको UIPopoverController के लिए एक कमजोर संपत्ति संदर्भ बनाना होगा क्योंकि सामग्री दृश्य नियंत्रक के भीतर से इसे एक्सेस करने का कोई तरीका नहीं है।

मुझे आश्चर्य हुआ कि कैसे UIViewControllers मोडल व्यू कंट्रोलर, पैरेंट व्यू कंट्रोलर, नेविगेशन कंट्रोलर, स्प्लिट व्यू कंट्रोलर, टैब बार कंट्रोलर, सर्च डिस्प्ले कंट्रोलर और आईओएस 5 के रूप में, बाल व्यू कंट्रोलर तक पहुंच सकते हैं साथ ही नियंत्रकों को पेश और प्रस्तुत किया गया ... लेकिन पॉपओवर नियंत्रक नहीं (पॉपओवर UIViewController एस नहीं हैं लेकिन अभी भी)।

तकनीकी रूप से, UIViewController में पॉपओवर नियंत्रक को पुनर्प्राप्त करने के लिए एक निजी, अनियंत्रित विधि है ... मुझे नहीं पता कि उन्होंने इसे कभी सार्वजनिक क्यों नहीं किया है क्योंकि यह उपर्युक्त नियंत्रकों में से किसी एक जैसा होना चाहिए।

हालांकि निजी, अनियंत्रित दुनिया में भी, dismissModalViewcontrollerAnimated: के बराबर नहीं है। आपको अभी भी उस संदर्भ को प्राप्त करना होगा और फिर इसे इस तरह से खारिज कर देना होगा।

+1

दस्तावेज़ों के माध्यम से खोज करने के बाद मैं भी इससे आश्चर्यचकित था। दुर्भाग्य से यह पूरे अवांछित निर्भरताओं को जोड़ता है। – Maurizio

+0

आईओएस 8 में, अब आपके पास एक विकल्प हो सकता है: self.popoverPresentationController – Jacky

1

इस हल करने के लिए एक और तरीका है (अपने सभी दृश्य नियंत्रकों के लिए) एक सार दृश्य नियंत्रक कि -(void)closePopoverIfNecessary:(NSNotification*)notification के रूप में एक विधि इस तरह के लिए एक NSNotification प्रेक्षक कहते हैं बना सकते हैं और अगर उनके पॉपओवर (रों) बंद करने के लिए बच्चे कक्षाओं वैकल्पिक है लागू विधि करने के लिए है खुला। फिर पॉपओवर के नियंत्रक के भीतर से आप इसे बंद करने के लिए अधिसूचना को आग लगाते हैं। यदि आवश्यक हो तो आप अधिसूचना (userInfo) के माध्यम से अन्य जानकारी भी पारित कर सकते हैं।

इस तरह माता-पिता संदर्भों की कोई आवश्यकता नहीं है।

+0

इसके साथ अल्ट्रा कंट्रोलर के 'dealloc' में पर्यवेक्षकों को हटाने के लिए मत भूलना –

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