微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

UILabel 点击手势识别器似乎不起作用

如何解决UILabel 点击手势识别器似乎不起作用

我知道这是一个经常被问到的问题,但我有一个具体的问题案例,因为我抽象了 tapGestureRecognizer,因此可以重复使用它,而无需每次都对其进行初始化。

这是我在 UIlabels 上使用 UITapGestureRecognizer 的方法

在 UILabel 扩展中:

func setonClickListener(action: @escaping (_: Any?) -> Void,clickedobject: Any? = nil){
        let tapRecogniser = ClickListener(target: self,action: #selector(onViewClicked),clickedobject: clickedobject,onClick: action)
        self.addGestureRecognizer(tapRecogniser)
    }
    
    @objc func onViewClicked(_ sender: ClickListener) {
        sender.onClick?(sender.clickedobject)
    }

ClickListener 类:

class ClickListener: UITapGestureRecognizer {
    var onClick : ((_: Any?) -> Void)?
    var clickedobject: Any?
    
    init(target: Any?,action: Selector?,clickedobject: Any? = nil,onClick: ((_: Any?) -> Void)? = nil) {
        self.clickedobject = clickedobject
        self.onClick = onClick
        super.init(target: target,action: action)
    }
}

这里是我如何称呼它的:

class VoteBoxView: UIView {

  private var updateVoteButton: UILabel! = UILabel()

  override init(frame: CGRect) {
    super.init(frame: .zero)
  }
    
  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
  }

func initLayout() {
  self.addSubview(updateVoteButton)
  self.updateVoteButton.text = "Modifier"
  self.updateVoteButton.setToSecondaryText()
  self.updateVoteButton.setToSecondaryTextColor()
  self.updateVoteButton.underline()
  self.updateVoteButton.snp.makeConstraints{ (make) -> Void in
       make.top.equalTo(self).offset(15)
       make.right.equalTo(self)
  }
  self.initactions()
}

func initactions() {
        updateVoteButton.isUserInteractionEnabled = true
        updateVoteButton.setonClickListener(action: updateVote,clickedobject: nil)
    }

    func updateVote(clickedobject: Any?) {
        self.toggleResults(active: false)
    }
}

我确实成功地让它在其他情况下工作,但我发现没有任何差异会导致它在这里不起作用。

解决方法

问题是我没有在我的视图上设置正确的约束,所以我的 ViewController 视图阻止了点击。我是通过在所有内容上添加彩色背景来发现的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。