2016-01-26 10 views
16

नहीं कहा गया है मेरे पास एक दृश्य नियंत्रक है जो स्टोरीबोर्ड सेगू का उपयोग करके पॉपओवर में प्रस्तुत किया गया है।स्टोरीबोर्ड पॉपओवर खारिज कर दिया गया, प्रतिनिधि विधियों को

enter image description here

पेश दृश्य नियंत्रक में, मैं निम्नलिखित कोड था:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if let svc = segue.destinationViewController as? SettingsViewController { 
     svc.popoverPresentationController?.delegate = self 
    } 
} 

हालांकि, यह है कि प्रस्तुत दृश्य नियंत्रक पता चला है, हालांकि यह एक पॉपओवर के रूप में प्रकट होता है, एक modalPresentationStyle है '.Modal, और इसलिए nilpopoverPresentationController। अजीब!

तो, मैं कोड इस प्रकार अद्यतन:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if let svc = segue.destinationViewController as? SettingsViewController { 
     svc.modalPresentationStyle = .Popover 
     svc.popoverPresentationController?.delegate = self 
    } 
} 

svc.popoverPresentationController प्रतिनिधि अब ठीक सेट कर दिया जाता है, लेकिन अगर पॉपओवर उपयोगकर्ता द्वारा खारिज किया जाता है बाहर दोहन, UIPopoverPresentationControllerDelegate प्रतिनिधि तरीकों में से कोई भी (जैसे popoverPresentationControllerShouldDismissPopover हैं ।?। कहा जाता है क्या मुझे याद आ रही

+0

शायद एक बेवकूफ सवाल है, क्या आप वाकई segue के रूप में "वर्तमान सेट कर दिया जाता हैं स्टोरीबोर्ड में "पॉपओवर" के रूप में? –

+0

हां, निश्चित रूप से - और यह एक पॉपओवर के रूप में सही ढंग से प्रस्तुत करता है (और 'svc.modalPresentationStyle = .Popover'' सेट करने से पहले भी किया था। यद्यपि जांच की कीमत! –

+0

एक बात अजीब है, इसे "पॉपओवर के रूप में प्रस्तुत करें" कहना चाहिए, क्योंकि "पॉपओवर" को बहिष्कृत किया जाना चाहिए, लेकिन मुझे नहीं लगता कि यह समस्या है ... –

उत्तर

7

इस मामले में प्रतिनिधिमंडल के लिए कोई ज़रूरत नहीं presentingViewController (जो भी vc पॉपओवर युक्त है), तो बस ओवरराइड करता है:

override func dismissViewControllerAnimated(flag: Bool, completion: (() -> Void)?) { 
    // Before calling super get a handle on which controller is being dismissed 
    print("Dismiss: \(self.presentedViewController)") 
    super.dismissViewControllerAnimated(flag, completion: completion) 
} 

आपको सूचित किया जाएगा कि यह कैसे खारिज कर दिया गया है। आपको prepareForSegue: में कम से कम कोई भी चर/सेटिंग्स सेट करने की आवश्यकता नहीं है (कम से कम इस बातचीत को संभालने के लिए)।

+0

यह एकमात्र उत्तर है, इसलिए इनाम प्राप्त करें। हालांकि सही नहीं लगता है, किसी भी तरह –

+0

@AshleyMills उत्सुक क्यों आप ऐसा नहीं सोचते? Popovers, अलर्ट, और एक्शन शीट्स वास्तविक कंटेनर (आईओएस 8 में शुरू) की ओर बढ़ने के साथ, अपने स्वयं के स्वतंत्र दृश्य तत्वों (जैसे विंडोज़) के विपरीत, वास्तव में यह वास्तव में समझ में आता है। एक पॉपओवर अब सामान्य वीसी के समान काम करता है। – Firo

+0

क्षमा करें, इस अर्थ में नहीं कि आपका बुरा जवाब था।बस मुझे उम्मीद थी कि किसी को पता चलेगा कि क्यों पॉपओवर प्रस्तुति नियंत्रक विधियों को निकाल दिया नहीं जा रहा था। और मेरे मामले में, पॉपओवर को नौसेना बार में UIBarButtonItem से प्रस्तुत किया जाता है, इसलिए NavController को आपके समाधान को लागू करने के लिए उप-वर्गीकरण की आवश्यकता होती है –

0

ही समस्या में पड़ गए और प्रलेखन के माध्यम से पढ़ने के बाद, मुझे एहसास हुआ कि आप कॉल करने की आवश्यकता:

[self presentViewController:myPopoverViewController animated: YES completion: nil];

प्रतिनिधि तरीकों के लिए आदेश में कहा जाता है करने के लिए।

पूर्ण स्निपेट के रूप में इस प्रकार है और मेरे भीतर चलाया जाता है है - (शून्य) prepareForSegue: इस विधि:

// Present the view controller using the popover style. 
myPopoverViewController.modalPresentationStyle = UIModalPresentationPopover; 
[self presentViewController:myPopoverViewController animated: YES completion: nil]; 

// Get the popover presentation controller and configure it. 
UIPopoverPresentationController *presentationController = 
     [myPopoverViewController popoverPresentationController]; 
presentationController.permittedArrowDirections = 
     UIPopoverArrowDirectionLeft | UIPopoverArrowDirectionRight; 
presentationController.sourceView = myView; 
presentationController.sourceRect = sourceRect; 

https://developer.apple.com/documentation/uikit/uipopoverpresentationcontroller

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