如何禁用在 swift 中插入表格单元格时的选择?
how to disable selection on inset of UITableCell in swift?
我通过插入内容在 UITableViewCell 之间创建了假 space。
contentView.frame = contentView.frame.inset(by: UIEdgeInsets(top: 0, left: 0, bottom: 8, right: 0))
但是,UITableCell 仍然接受基于单元格之间选择的选择事件,因为即使非插入的 8 像素仍然包含在 UITableViewCell 中。
是否有正确的方法来避免选择?
我觉得这是一个 hack,所以我想知道更正常的做事方式是什么。我有点希望 tableview 本身上的 属性 设置来自 interface builder
的插图
您始终可以在 tableView 单元格中覆盖 hitTest
或 pointInside
。您已经提到您正在设置 contentView.frame
假设其更新正常,您可以简单地使用以下实现之一
class SOTableViewCell: UITableViewCell {
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
if contentView.frame.contains(point) {
return super.hitTest(point, with: event) /*return self*/
}
return nil
}
}
或者
class SOTableViewCell: UITableViewCell {
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
return contentView.frame.contains(point)
}
}
我通过插入内容在 UITableViewCell 之间创建了假 space。
contentView.frame = contentView.frame.inset(by: UIEdgeInsets(top: 0, left: 0, bottom: 8, right: 0))
但是,UITableCell 仍然接受基于单元格之间选择的选择事件,因为即使非插入的 8 像素仍然包含在 UITableViewCell 中。
是否有正确的方法来避免选择?
我觉得这是一个 hack,所以我想知道更正常的做事方式是什么。我有点希望 tableview 本身上的 属性 设置来自 interface builder
的插图您始终可以在 tableView 单元格中覆盖 hitTest
或 pointInside
。您已经提到您正在设置 contentView.frame
假设其更新正常,您可以简单地使用以下实现之一
class SOTableViewCell: UITableViewCell {
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
if contentView.frame.contains(point) {
return super.hitTest(point, with: event) /*return self*/
}
return nil
}
}
或者
class SOTableViewCell: UITableViewCell {
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
return contentView.frame.contains(point)
}
}