带有按钮 addTarget 事件的标签不会触发

Posted

技术标签:

【中文标题】带有按钮 addTarget 事件的标签不会触发【英文标题】:Label with button addTarget event not fire 【发布时间】:2017-05-31 08:18:41 【问题描述】:

我在 tableview 单元格中有一个标签。标签有文本文本的结尾有一个按钮,该按钮代表用户喜欢。一切都很好,但问题是hitForLike 不触发。按钮单击事件不触发。我有什么想念的吗

var titleLabel : UILabel = 
        var label = UILabel()
        label.font = UIFont.systemFont(ofSize: 21)
        label.translatesAutoresizingMaskIntoConstraints = false
        return label
    ()    

func hitForLike(_ sender : UIButton)

        print("i miss you ....")

    

func titleWithLikeButton(title:String,isFavorite : Bool)

          titleLabel.text = title

        let button = UIButton(frame: CGRect(x: titleLabel.intrinsicContentSize.width, y: 0, width: 44, height: 44))

        //setup your button here
        button.setTitleColor(UIColor.red, for: UIControlState.normal)
        let image = UIImage(named: "heart-empty.png")
        button.setImage(image, for: UIControlState.normal)

        button.addTarget(self, action: #selector(hitForLike(_:)), for: UIControlEvents.touchUpInside)

        //Add the button to the text label
        titleLabel.addSubview(button)


【问题讨论】:

设置 label.userinteractionenabled == true 并检查 【参考方案1】:

我认为您需要在标签上启用用户交互,如下所示:

titleLabel.isUserInteractionEnabled = true

所以你的整个函数最终看起来像这样:

func titleWithLikeButton(title:String,isFavorite : Bool)
    titleLabel.text = title
    titleLabel.isUserInteractionEnabled = true //enable userinteraction

    let button = UIButton(frame: CGRect(x: titleLabel.intrinsicContentSize.width, y: 0, width: 44, height: 44))

    //setup your button here
    button.setTitleColor(UIColor.red, for: UIControlState.normal)
    let image = UIImage(named: "heart-empty.png")
    button.setImage(image, for: UIControlState.normal)

    button.addTarget(self, action: #selector(hitForLike(_:)), for: UIControlEvents.touchUpInside)

    //Add the button to the text label
    titleLabel.addSubview(button)

希望对您有所帮助。

【讨论】:

【参考方案2】:

您必须在func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 中设置您的单元格按钮目标,如下所示:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 


        let cell = tableViewForPAC.dequeueReusableCell( withIdentifier: "TableViewCell", for: indexPath) as! TableViewCell
        cell.yourButton.tag = indexpath.row
        cell.yourButton.addTarget(self, action: #selector(hitForLike(_:)), for: UIControlEvents.touchUpInside)
       return cell

 

func hitForLike(_ sender : UIButton)

        print(sender.tag)
        print("i miss you ....")

    

【讨论】:

以上是关于带有按钮 addTarget 事件的标签不会触发的主要内容,如果未能解决你的问题,请参考以下文章

SharePoint 2013 Web 部件按钮单击事件未触发

点击<a>标签之后触发后台事件怎么做?或者js控制按钮的点击,怎么做,就是点击<a>之后触发一个按钮的事件

Tab 不会触发 keydown 或 keypress 事件

求教。用jQuery给按钮添加disabled属性,该按钮变灰后,点击该按钮仍能触发事件

为啥 Qt mouseReleaseEvent 不会触发?

带有 Bootstrap 的按钮 OnClick 事件在 iOS 上不起作用