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

Posted

技术标签:

【中文标题】UILabel 点击手势识别器似乎不起作用【英文标题】:UILabel tap gesture recognizer doesn't seem to work 【发布时间】:2021-06-10 12:17:13 【问题描述】:

我知道这是一个经常被问到的问题,但我有一个具体的问题案例,因为我抽象了 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)
    

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

【问题讨论】:

发布你如何使用VoteBoxView ? 我只是将它添加为 ViewController 子视图 【参考方案1】:

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

【讨论】:

以上是关于UILabel 点击手势识别器似乎不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 ListView 中点击手势手势识别器不起作用

添加手势识别器 uivew 导航栏 swift 不起作用

手势识别器不起作用。执行下方元素的操作 - SWIFT

滑动手势识别器在垂直方向上不起作用

点击手势识别器 Xcode

MessageKit:将手势识别器添加到 messageCollectionView 和 cellDelegate 不起作用