Ios 在Swift中以编程方式将UIgestureRecognitor添加到子视图

Ios 在Swift中以编程方式将UIgestureRecognitor添加到子视图,ios,iphone,swift,uiview,uigesturerecognizer,Ios,Iphone,Swift,Uiview,Uigesturerecognizer,我当前有一个子视图,它是在ViewDidLoad()中创建并添加到UIView的。我正在尝试使用用户向导识别器检测轻触并取消隐藏特定按钮。我当前的代码: override func viewDidLoad() { super.viewDidLoad() architectView = CustomClass(frame: self.view.bounds) self.view.addSubview(architectView) let gestu

我当前有一个子视图,它是在
ViewDidLoad()
中创建并添加到
UIView
的。我正在尝试使用用户
向导识别器
检测轻触并取消隐藏特定按钮。我当前的代码:

 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()
函数是一个简单的测试,用于查看抽头是否被识别。按下此代码时,它不会触发
UIAlert
?我错过了什么

我在这里测试了你的代码,它确实有效。但是,我认为您可能没有将
uigestureRecognitizerDelegate
协议添加到视图控制器中。见下文:

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

}

基于拉斐尔·席尔瓦的Swift 3版本代码回答:

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

}

对我已经编辑以使其更清晰。您是否尝试在handleTap中放置断点?以查看函数是否被调用?是的,我刚刚尝试过。函数没有被调用,我刚刚测试过。我为主UIView创建了一个插座,并将UIGestureRecognitor添加到该视图中。我的天哪,函数handleTap()没有被调用。谢谢你,我一直在到处寻找唯一有效的现代答案。苹果到底为什么这么不赞成呢。他们的大多数反对意见似乎完全没有必要,只会引起混乱smh。我认为这里不需要UIgestureRecognitizerDelegate