2015-03-18 2 views
9

में UIButton से पॉपओवर बनाना, मैं UIButton से 50x50px के बारे में एक छोटा पॉपओवर बनाना चाहता हूं। मैंने अनुकूली सेगू का उपयोग करके विधियों को देखा है, लेकिन मेरे आकार वर्गों का अर्थ इस प्रकार है कि मैं इन सुविधाओं का उपयोग नहीं कर सकता!स्विफ्ट

मैं इस पॉपओवर को और कैसे बना सकता हूं? क्या मैं इसे अपने बटन IBACtion के अंदर कोड के साथ बना सकता हूं? या फिर भी स्टोरीबोर्ड के साथ ऐसा करने का एक तरीका है?

उत्तर

9

आप नीचे दिए गए दो विकल्पों में से एक कर सकते हैं:

  • अपने UIViewController में UIButton के लिए एक कार्य बना सकते हैं और अंदर पेश ViewController आप एक पॉपओवर की तरह चाहते हैं और अपने UIViewController प्रोटोकॉल UIPopoverPresentationControllerDelegate लागू करने के लिए है, निम्नलिखित कोड में एक बार देख ले:

    @IBAction func showPopover(sender: AnyObject) { 
    
        var popoverContent = self.storyboard?.instantiateViewControllerWithIdentifier("StoryboardIdentifier") as! UIViewController 
    
        popoverContent.modalPresentationStyle = .Popover 
        var popover = popoverContent.popoverPresentationController 
    
        if let popover = popoverContent.popoverPresentationController { 
    
         let viewForSource = sender as! UIView 
         popover.sourceView = viewForSource 
    
         // the position of the popover where it's showed 
         popover.sourceRect = viewForSource.bounds 
    
         // the size you want to display 
         popoverContent.preferredContentSize = CGSizeMake(200,500) 
         popover.delegate = self 
        }    
    
        self.presentViewController(popoverContent, animated: true, completion: nil) 
    } 
    
    func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle { 
        return .None 
    } 
    

    @matt प्रोग्रामिंग की पुस्तक के अनुसार iOS 8:

    एक पॉपओवर प्रस्तुति नियंत्रक, iOS 8 में, एक प्रस्तुति नियंत्रक (UIPresentationController) है, और प्रस्तुति नियंत्रक अनुकूलित होते हैं। इसका मतलब यह है कि, डिफ़ॉल्ट रूप से, एक क्षैतिज कॉम्पैक्ट वातावरण (यानी एक आईफोन पर) में, .Popover मोडल प्रेजेंटेशन शैली को .FullScreen के रूप में माना जाएगा। आईपैड पर पॉपओवर के रूप में क्या दिखाई देता है, जो आईफोन पर पूर्णस्क्रीन प्रस्तुत दृश्य के रूप में दिखाई देगा, पूरी तरह से इंटरफेस को बदल देगा।

    इस व्यवहार iPhone में आप अपने UIViewController अंदर प्रतिनिधि विधि adaptivePresentationStyleForPresentationController लागू करने के लिए पॉपओवर सही ढंग से प्रदर्शित करने की आवश्यकता से बचने के लिए।

  • मेरी राय में अन्य तरीके से करना अधिक आसान है, और इंटरफ़ेस बिल्डर उपयोग कर रहा है, बस ViewController आप चाहते हैं और segue में Popover segue चयन करने के लिए एक segue बनाने के लिए UIButton से व्यवस्था।

मुझे उम्मीद है कि यह आपकी मदद करेगा।

+0

इसके लिए धन्यवाद! पहला उदाहरण काम करता है लेकिन यह आकार को आकार देने लगता है। पॉपओवर बस पूर्ण स्क्रीन आता है। मुझे लगता है कि आपके द्वारा समझाया गया दूसरा तरीका बेहतर तरीका होगा .. लेकिन एक बार फिर मुझे एक त्रुटि मिलती है IBCocoaTouchoutlet एंकर व्यू कनेक्शन का पालन नहीं कर सका। क्या आप मुझे कुछ कोड दे सकते हैं जो आपके द्वारा समझाया गया दूसरा तरीका होगा? – user4671001

+0

@ user4671001 मुझे समझ में नहीं आता है, दूसरी तरफ आपको एन्कोव्यू को सेट करने की आवश्यकता नहीं है –

+2

पॉपओवर आईफ़ोन पर पूर्णस्क्रीन मोडल के रूप में दिखाता है, आप इसे इस फ़ंक्शन को जोड़कर अक्षम कर सकते हैं: 'func अनुकूली प्रस्तुति स्टाइलफोर प्रस्तुति नियंत्रक (पीसी: यूआईपी प्रस्तुतकरण नियंत्रक!) - > UIModalPresentationStyle { // यह * बलों * आईफोन पर एक पॉपओवर प्रदर्शित किया जाएगा। कोई } ' – user1076813

1

यहां आप बटन क्लिक पर एक पॉपओवर प्रस्तुत कर सकते हैं।

func addCategory(_ sender : UIButton) { 

     var popoverContent = self.storyboard?.instantiateViewControllerWithIdentifier("NewCategory") as UIViewController 
     var nav = UINavigationController(rootViewController: popoverContent) 
     nav.modalPresentationStyle = UIModalPresentationStyle.Popover 
     var popover = nav.popoverPresentationController 
     popoverContent.preferredContentSize = CGSizeMake(50,50) 
     popover.delegate = self 
     popover.sourceView = sender 
     popover.sourceRect = sender.bounds 

     self.presentViewController(nav, animated: true, completion: nil) 

    } 
0

स्विफ्ट 4 यहाँ पूरी तरह से कूट चल रहा है। तो यहाँ आप 250x250 के आकार के साथ पॉप अप विंडो देखेंगे:

import UIKit 

    class ViewController: UIViewController { 

     @IBOutlet weak var button: UIButton! 

     override func viewDidLoad() { 
      super.viewDidLoad() 

// in case if you don't want to make it via IBAction 
      button.addTarget(self, action: #selector(tapped), for: .touchUpInside) 
     } 

     @objc 
     private func tapped() { 

      guard let popVC = storyboard?.instantiateViewController(withIdentifier: "popVC") else { return } 

      popVC.modalPresentationStyle = .popover 

      let popOverVC = popVC.popoverPresentationController 
      popOverVC?.delegate = self 
      popOverVC?.sourceView = self.button 
      popOverVC?.sourceRect = CGRect(x: self.button.bounds.midX, y: self.button.bounds.minY, width: 0, height: 0) 
      popVC.preferredContentSize = CGSize(width: 250, height: 250) 

      self.present(popVC, animated: true) 
     } 
    } 


// This is we need to make it looks as a popup window on iPhone 
    extension ViewController: UIPopoverPresentationControllerDelegate { 

     func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle { 
      return .none 
     } 
    } 

ध्यान आप popVC पहचानकर्ता एक ViewController करने के लिए आप एक पॉपअप के रूप में प्रस्तुत करना चाहते हैं प्रदान करने के लिए है कि में ले लो।

आशा है कि मदद करता है!