由 UITapGestureRecognizer 创建的单击在 UIButton 上不起作用

Posted

技术标签:

【中文标题】由 UITapGestureRecognizer 创建的单击在 UIButton 上不起作用【英文标题】:Single tap, created by UITapGestureRecognizer, doesn't work on UIButton 【发布时间】:2016-01-12 06:01:03 【问题描述】:

我有很多 UIButtons 没有任何动作。我想在点击处理函数中调用一些操作。我使用 UITapGestureRecognizer 创建单击。当我在 UIButton 上点击 not 时,单击处理程序会工作。当我点击我的 UIButton 时,我看到按下此按钮的动画,但单击处理程序不起作用。我还创建了双击,它工作正常。

问题№1 单击一下可以做什么?当我点击我的 UIButton 时,处理程序应该可以工作。

问题№2 如何在点击处理程序中获取 UIButton?我需要从此按钮获取文本标签。

我的部分代码:

override func viewDidLoad() 
    ...

    let singleTap = UITapGestureRecognizer(target: self, action: "singleTap:")
    singleTap.numberOfTapsRequired = 1
    singleTap.numberOfTouchesRequired = 1
    view.addGestureRecognizer(singleTap)

    let doubleTap = UITapGestureRecognizer(target: self, action: "doubleTap:")
    doubleTap.numberOfTapsRequired = 2
    doubleTap.numberOfTouchesRequired = 1
    view.addGestureRecognizer(doubleTap)
    singleTap.requireGestureRecognizerToFail(doubleTap)

    ...


func doubleTap(sender: UIGestureRecognizer) 
    if sender.state == .Ended 
        print("doubleTap")
    


func singleTap(sender: UIGestureRecognizer) 
    if sender.state == .Ended 
        print("singleTap")
    


func addButton(time:String, x:CGFloat, y:CGFloat, width:CGFloat, height:CGFloat, tag: Int) -> UIButton 
    let button = UIButton(type: UIButtonType.System) as UIButton
    button.frame = CGRectMake(x, y, width, height)
    button.setTitle(time, forState: UIControlState.Normal)
    button.tag = tag
    self.scrollView.addSubview(button)
    return button

【问题讨论】:

为什么不使用 IBAction 作为按钮? view.addGestureRecognizer(singleTap) 建议单击视图而不是button 禁用每个 UIButtons 的用户交互或为所有按钮添加处理程序。 @iosDeveloper - 右边也加button.enabled=NO,先全局定义button。虽然这可能会有所帮助:***.com/questions/4825199/… 【参考方案1】:

如果您想将 TapGesture 添加到 Button 中,请这样做:

let singleTap = UITapGestureRecognizer(target: self, action: "singleTap:")
singleTap.numberOfTapsRequired = 1
singleTap.numberOfTouchesRequired = 1
yourButton.addGestureRecognizer(singleTap)

【讨论】:

非常感谢。我认为 UITapGestureRecognizer 仅适用于视图。为了获得文本标签,我在处理程序中使用这部分代码:(sender.view as! UIButton).titleLabel!.text!

以上是关于由 UITapGestureRecognizer 创建的单击在 UIButton 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

UITapGestureRecognizer 不适用于 UIView 动画

使用 UITapGestureRecognizer 无法识别的选择器

UIlabel 中的 UITapGestureRecognizer 错误

UITapGestureRecognizer 的问题

带有点击事件的 UITapGestureRecognizer

UIButton 上的 UITapGestureRecognizer