2015-03-18 44 views
9

UIButton'dan yaklaşık 50x50px küçük bir popover oluşturmak istiyorum. Adaptif segue'leri kullanan yöntemleri gördüm ama boyut sınıflarımın dönüşü anlamına gelir ki, bu özellikleri kullanamıyorum!Swift'de bir UIButton'tan bir popover oluşturma

Bu pencereyi başka nasıl oluşturabilirim? Düğme IBACtion düğümündeki kodu kullanarak oluşturabilir miyim? Ya da bunu hala storyboard'larla yapabileceğim bir yol var mı?

cevap

9

Aşağıdaki iki seçenekten birini yapabilirsiniz:

  • sunmak içerdeki UIViewController yılında UIButton için bir eylem oluşturun ve ViewController bir popover gibi istediğiniz ve sizin UIViewController protokolünü UIPopoverPresentationControllerDelegate uygulamak zorundadır iOS 8 @matt Programlama kitabı göre

    @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 
    } 
    

    : aşağıdaki kodda bir göz atın:

    popover sunum kontrolörü, IOS 8'de, bir sunum kontrolörü (UIPresentationController) ve sunum kontrol uyarlanabilir. Bu, varsayılan olarak, yatay olarak kompakt bir ortamda (yani bir iPhone üzerinde) .Popover modal sunum stilinin .FullScreen olarak kabul edileceği anlamına gelir. IPad'de bir popover olarak görünen, iPhone'da tam ekran sunulan bir görünüm olarak görünecek ve tamamen arayüzü değiştirecektir.

    doğru popover gösterilecek senin UIViewController içindeki temsilci yöntemi adaptivePresentationStyleForPresentationController uygulamak gerekir iPhone bu davranışı engellemek için.

  • Bence başka bir yol yapmak için daha kolaydır ve sadece istediğiniz ve segue içinde Popover segue seçmek ViewController bir segue oluşturmak için UIButton gelen düzenlemek, Interface Builder kullanıyor.

Umarım bu size yardımcı olur.

+0

Bunun için teşekkürler! İlk örnek işe yarıyor, ancak büyüklüğünü suçluyor gibi görünüyor. Popover sadece tam ekran geliyor. Açıkladığınız ikinci yolun daha iyi bir yol olacağını düşünüyorum .. Ama bir kez daha hata alıyorum IBCocoaTouchoutlet çapa Görünümü ile bağlantı kuramadı. Açıkladığınız ikinci yolla devam edebilecek bir kod verebilir misiniz? – user4671001

+0

@ user4671001 Anlamıyorum, seconde şekilde hiçbir şey için anchoView ayarlamak gerek yok –

+2

popover iphones tam ekran modal olarak gösterir, bu fonksiyonu ekleyerek devre dışı bırakabilirsiniz: 'func adaptivePresentationStyleForPresentationController (PC: UIPresentationController!) - > UIModalPresentationStyle { // Bu *, iPhone dönüşünde görüntülenecek bir popover * } – user1076813

1

Burada bir düğmeyi tıklatma düğmesine basabilirsiniz. İşte

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

Swift 4 tamamen kod çalışıyor. Yani burada 250x250 büyüklüğü ile pop-up pencere göreceksiniz:

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 
     } 
    } 

Eğer bir popup olarak sunmak istediğiniz bir viewController için popVC tanımlayıcı sağlamak zorunda dikkat içine atın.

Bu yardımcı olur umarım!