2016-02-17 9 views
8

Ich habe derzeit eine Unteransicht, die erstellt und hinzugefügt wird, die UIView in ViewDidLoad(). Ich versuche UIGestureRecognizers zu verwenden, um ein Antippen zu erkennen und eine bestimmte Schaltfläche sichtbar zu machen. Mein derzeitiger Code:Hinzufügen von UIGestureRecognizer zu Subview programmatisch in Swift

Die handleTap() Funktion ist ein einfacher Test, um zu sehen, ob die Taps erkannt werden. Dieser Code löst das UIAlert nicht aus, wenn es gedrückt wird? Was vermisse ich?

+0

Ja. Ich habe bearbeitet, um zu machen ist klarer –

+0

Haben Sie versucht, einen Haltepunkt in handleTap zu setzen: um zu sehen, wenn die Funktion sogar angerufen wird? –

+0

Ja, ich habe es gerade versucht. Die Funktion wird nicht aufgerufen –

Antwort

12

Ich habe Ihren Code hier getestet und es funktioniert. Ich denke jedoch, dass Sie möglicherweise fehlen, um das UIGestureRecognizerDelegate Protokoll Ihrem View Controller hinzuzufügen. Siehe unten:

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 Versionscode basiert auf Raphael Silva Antwort:

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 mein Gott genannt. Danke, ich habe weit und breit nach der einzigen MODERN Antwort gesucht, die funktioniert. Warum in der Welt hält Apple so viel ab. Die meisten ihrer Abwertungen scheinen völlig unnötig und verursachen nur Verwirrung. –