2016-02-17 22 views
8

Şu anda ViewDidLoad() içindeki UIView öğesine oluşturulan ve eklenen bir alt görüm var. Bir dokunma algılamak ve belirli bir düğmeyi göstermek için UIGestureRecognizers'ı kullanmaya çalışıyorum. Benim geçerli kod:UIGestureRecognizer'ı Programlı Olarak Altında görüntülemek için Swift uygulamasında

override func viewDidLoad() { 
    super.viewDidLoad() 
    architectView = CustomClass(frame: self.view.bounds) 
    self.view.addSubview(architectView)   
    let gestureRecognizer = UITapGestureRecognizer(target: self, action: "handleTap:") 
    gestureRecognizer.delegate = self 
    architectView.addGestureRecognizer(gestureRecognizer) 
} 

func handleTap(gestureRecognizer: UIGestureRecognizer) { 
    let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.Alert) 
    alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.Default, handler: nil)) 
    self.presentViewController(alert, animated: true, completion: nil) 
} 

handleTap() fonksiyonu musluklar kabul edilip edilmediğini görmek için basit bir testtir. Bu kod basıldığında UIAlert'i tetiklemiyor mu? Neyi kaçırıyorum?

+0

Evet. Daha net hale getirmek için düzenledim –

+0

İşlevi bir çağrışım koymayı denediniz mi? –

+0

Evet, denedim. Bu işlev, test ettiğim –

cevap

12

Kodunuzu burada test ettim ve işe yarıyor. Ancak, View Denetleyicinize UIGestureRecognizerDelegate protokolünü eklemek için eksik olabileceğinizi düşünüyorum. Aşağıya bakın: Raphael Silva Yanıta göre

class ViewController: UIViewController, UIGestureRecognizerDelegate { 

    var architectView = UIView() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     architectView = UIView(frame: self.view.bounds) 
     self.view.addSubview(architectView) 
     let gestureRecognizer = UITapGestureRecognizer(target: self, action: "handleTap:") 
     gestureRecognizer.delegate = self 
     architectView.addGestureRecognizer(gestureRecognizer) 
    } 

    func handleTap(gestureRecognizer: UIGestureRecognizer) { 
     let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.Alert) 
     alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.Default, handler: nil)) 
     self.presentViewController(alert, animated: true, completion: nil) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

} 
9

Swift 3 sürüm kodu:

import UIKit 

class ViewController: UIViewController, UIGestureRecognizerDelegate { 

    var architectView = UIView() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     architectView = UIView(frame: self.view.bounds) 
     self.view.addSubview(architectView) 
     let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(ViewController.handleTap(gestureRecognizer:))) 
     gestureRecognizer.delegate = self 
     architectView.addGestureRecognizer(gestureRecognizer) 
    } 

    func handleTap(gestureRecognizer: UIGestureRecognizer) { 
     let alert = UIAlertController(title: "Alert", message: "Message", preferredStyle: UIAlertControllerStyle.alert) 
     alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.default, handler: nil)) 
     self.present(alert, animated: true, completion: nil) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

} 
+0

Oh tanrısı değil aman tanrım. Teşekkür ederim, arı çalışmakta olan tek MODERN cevabı için uzak ve geniş arama yapıyorum. Dünyadaki Apple neden bu kadar itiraz ediyor. İhmallerinin çoğu tamamen gereksiz görünüyor ve sadece kafa karışıklığına neden oluyor. –

İlgili konular