自定义 TableView 单元格不可点击
Custom TableView Cell is not Clickable
我通过为它创建一个单独的 class 创建了一个自定义表格视图单元格。该代码工作正常,唯一的例外是,如果我点击单元格中的标签,该单元格不会注册它已被选中。但是,当点击单元格中的图像时,单元格会很好地记录它。我在下面包含了单元格的 class 的实现。如果有人能帮助我,我将不胜感激。
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")
}
}
由于您使用 UIextView
而不是 UILabel
作为标签,因此您的文本视图比单元格更早地捕获点击。设置 messageView.isUserInteractionEnabled = false
以避免这种行为。
我通过为它创建一个单独的 class 创建了一个自定义表格视图单元格。该代码工作正常,唯一的例外是,如果我点击单元格中的标签,该单元格不会注册它已被选中。但是,当点击单元格中的图像时,单元格会很好地记录它。我在下面包含了单元格的 class 的实现。如果有人能帮助我,我将不胜感激。
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")
}
}
由于您使用 UIextView
而不是 UILabel
作为标签,因此您的文本视图比单元格更早地捕获点击。设置 messageView.isUserInteractionEnabled = false
以避免这种行为。