Swift 识别 tableView 单元格点击区域
Swift recognize tableView cell tap area
如何以编程方式检测 tableView 单元格的特定区域?
例如,如果用户点击 tableView Cell 的左半边,则会调用 didSelectRowAt 并识别左半边的 cell。
伪:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("Entire cell tapped")
if(left side of cell pressed){
//cell.width /2
print("left side half of cell pressed")
}
}
根据 帖子,添加手势识别器可能会与 TableView 交互发生冲突。
因此,要实现您的要求,您必须将手势识别器添加到 UITableViewCell
的 contentView
并获取手势的点击位置。为此,
- 首先,定义
UITapGestureRecognizer
和 UITableViewCell
class 中的操作。参考以下代码
lazy var tap = UITapGestureRecognizer(target: self, action: #selector(didTapScreen))
.
.
.
// Gesture action
@objc func didTapScreen(touch: UITapGestureRecognizer) {
let xLoc = touch.location(in: self.contentView).x // Getting the location of tap
if xLoc > contentView.bounds.width/2 {
// RIGHT
} else {
// LEFT
}
}
- 在自定义单元格的
init()
方法中添加如下内容
override init(frame: CGRect) {
super.init(frame: frame)
tap.numberOfTapsRequired = 1
contentView.addGestureRecognizer(tap)
// Other setups
}
我尝试了 UICollectionViewCell
中的代码并得到了以下输出
如何以编程方式检测 tableView 单元格的特定区域?
例如,如果用户点击 tableView Cell 的左半边,则会调用 didSelectRowAt 并识别左半边的 cell。
伪:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("Entire cell tapped")
if(left side of cell pressed){
//cell.width /2
print("left side half of cell pressed")
}
}
根据
因此,要实现您的要求,您必须将手势识别器添加到 UITableViewCell
的 contentView
并获取手势的点击位置。为此,
- 首先,定义
UITapGestureRecognizer
和UITableViewCell
class 中的操作。参考以下代码
lazy var tap = UITapGestureRecognizer(target: self, action: #selector(didTapScreen))
.
.
.
// Gesture action
@objc func didTapScreen(touch: UITapGestureRecognizer) {
let xLoc = touch.location(in: self.contentView).x // Getting the location of tap
if xLoc > contentView.bounds.width/2 {
// RIGHT
} else {
// LEFT
}
}
- 在自定义单元格的
init()
方法中添加如下内容
override init(frame: CGRect) {
super.init(frame: frame)
tap.numberOfTapsRequired = 1
contentView.addGestureRecognizer(tap)
// Other setups
}
我尝试了 UICollectionViewCell
中的代码并得到了以下输出