2015-11-01 19 views
7

में एक पॉपओवर को खारिज करते समय पता लगाने के लिए कैसे मैं सार्वभौमिक स्टोरीबोर्ड का उपयोग करने के लिए एक ऐप अपडेट कर रहा हूं। मैंने एक नए व्यू कंट्रोलर को एक नए व्यू कंट्रोलर में इंटरफ़ेस बिल्डर का उपयोग करके बटन से अपने नए व्यू कंट्रोलर पर खींचकर और 'वर्तमान के रूप में पॉपओवर' को सेग्यू के रूप में चुनकर एक पॉपओवर सेगू बनाया है।आईओएस 9

जब उपयोगकर्ता पॉपओवर के बाहर दबाता है (इसे खारिज कर देता है) मुझे प्रस्तुत करने वाले दृश्य नियंत्रक में अधिसूचित होने की आवश्यकता है ताकि मैं उनके कार्यों को पूर्ववत कर सकूं। मैं यह कैसे कर सकता हूँ?

आम तौर पर मैंने पॉपओवर मैन्युअल रूप से बनाया होगा और मेरे व्यू कंट्रोलर को पॉपओवर के प्रतिनिधि बनाया होगा; मुझे popoverControllerDidDismissPopover प्रतिनिधि कॉल का उपयोग करने की अनुमति देता है। हालांकि, यह आईओएस 9 में बहिष्कृत है और यहां तक ​​कि अगर मुझे नहीं पता था कि मुझे पॉपओवर कहां मिलना है, तो मैं अपने प्रतिनिधि को मेरे व्यू कंट्रोलर पर सेट कर सकता हूं।

उत्तर

9

यह सुनिश्चित नहीं है कि आप किस विधि को बहिष्कृत कर रहे हैं लेकिन आप इसे प्राप्त करने के लिए अभी भी UIPopoverPresentationControllerDelegate का उपयोग कर सकते हैं। की तरह कुछ:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "popoverSegue" { 
     let vc = segue.destinationViewController 
     sortVC.modalPresentationStyle = .Popover 
     sortVC.popoverPresentationController?.sourceRect = filterButton.bounds 
     sortVC.preferredContentSize = CGSizeMake(216, 150) 
     sortVC.popoverPresentationController!.delegate = self 
    } 
} 

और फिर अपनी बर्खास्तगी को संभालने के लिए

func popoverPresentationControllerDidDismissPopover(popoverPresentationController: UIPopoverPresentationController) 

विधि का उपयोग करें।

+2

ध्यान रखें कि डीडडिस्मिशन फ़ंक्शन केवल तब कॉल हो जाता है जब पॉपओवर स्वयं को खारिज कर देता है, जैसे कि इसके बाहर एक स्पर्श। यदि आप इसे स्वयं अपने कोड से खारिज करते हैं (उदाहरण के लिए बटन दबाकर) तो इसे नहीं कहा जाएगा। – CMash

4

popoverControllerDidDismissPopover: विधि popoverPresentationControllerShouldDismissPopover: द्वारा प्रतिस्थापित कर दी गई है क्योंकि UIPopoverControllerDelegate को UIPopoverPresentationControllerDelegate द्वारा प्रतिस्थापित किया गया है।

अपने पेश दृश्य नियंत्रक से, नए प्रोटोकॉल के अनुरूप और prepareForSegue: में पॉपओवर प्रस्तुति नियंत्रक के लिए प्रतिनिधि सेट:

class MyPresentingViewController: UIViewController, UIPopoverPresentationControllerDelegate { 

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

    func popoverPresentationControllerShouldDismissPopover(popoverPresentationController: UIPopoverPresentationController) -> Bool { 
     return true 
    } 
} 

फिर आप रास्ते में बर्खास्तगी का पता लगाने को संभालने के लिए प्रतिनिधि विधि का उपयोग कर सकते हैं कि आप पहले इरादा कर रहे थे।