自定义 TableView 单元格不可点击

Posted

技术标签:

【中文标题】自定义 TableView 单元格不可点击【英文标题】:Custom TableView Cell is not Clickable 【发布时间】:2020-04-09 04:24:51 【问题描述】:

我通过为它创建一个单独的类来创建一个自定义的 tableview 单元格。该代码工作正常,唯一的例外是如果我点击单元格中的标签,该单元格不会注册它被选中。然而,当单元格中的图像被点击时,单元格会完美地记录它。我在下面包含了单元格的类的实现。如果有人可以帮助我,我将不胜感激。

class ItemCustomCell: UITableViewCell 

    var message: String?
    var itemImage: UIImage?

    var messageView: UITextView = 
        var text = UITextView()
        return text
    ()

    var itemImageView: UIImageView = 
        var itemImage = UIImageView()
        return itemImage
    ()
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) 
        super.init(style: style, reuseIdentifier: reuseIdentifier)

        self.addSubview(messageView)
        self.addSubview(itemImageView)

        itemImageView.translatesAutoresizingMaskIntoConstraints = false
        itemImageView.topAnchor.constraint(equalTo: self.topAnchor, constant: 10).isActive = true
        itemImageView.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -10).isActive = true
        itemImageView.widthAnchor.constraint(equalTo: self.heightAnchor).isActive = true
        itemImageView.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 10).isActive = true

        messageView.translatesAutoresizingMaskIntoConstraints = false
        messageView.leftAnchor.constraint(equalTo: self.itemImageView.rightAnchor, constant: 25).isActive = true
        messageView.rightAnchor.constraint(equalTo: self.rightAnchor, constant: 20).isActive = true
        messageView.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
        let fixedWidth = messageView.frame.size.width - 50
        let newSize = messageView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude))
        messageView.heightAnchor.constraint(equalToConstant: newSize.height).isActive = true
    

    override func layoutSubviews() 
        super.layoutSubviews()
        if let message = message 
            messageView.text = message
            messageView.font = UIFont(name: messageView.font!.fontName, size: 15)
            messageView.isEditable = false
            messageView.isScrollEnabled = false
        
        if let image = itemImage 
            itemImageView.image = image
        
    
    required init?(coder aDecoder: NSCoder) 
        fatalError("init(coder:) has not been implemented")
    

【问题讨论】:

【参考方案1】:

由于您使用UIextView 作为标签而不是UILabel,因此您的文本视图比单元格更早地捕捉到点击。设置messageView.isUserInteractionEnabled = false 以避免这种行为。

【讨论】:

非常感谢。

以上是关于自定义 TableView 单元格不可点击的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义滑动(而不是滑动删除)单元格(滑动到邮件/短信)中点击一个单元格时删除在其他 TableView 单元格中添加的子视图

在 UITableView 中处理自定义单元格的点击不会发生

从 Tableview 自定义单元格翻转过渡到 UIViewController

UITableview 单元格保留自定义图像视图过滤器

如何使用分页更改 tableview 自定义单元格中的 imageview 图像。

带有两个自定义单元格的 TableView 导致单元格重用问题(Swift 4)