我使用此代码来检测长按元素:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// some stuff
if let labelCell = model as? TTTLabelCell{
labelCell.delegate = self
labelCell.textLabel.addGestureRecognizer(longPressRec)
}
}
这是手势识别器
longPressRec.addTarget(self, action:#selector(labelLongPressed))
这是选择器
func labelLongPressed(){
print("Label Long pressed")
// labelCell.backgroundColor = UIColor.blue
}
我想要实现的,就像在代码上发表评论一样,是将所选对象(labelCell)传递给选择器labelLongPressed(),这将允许我更改一些属性。你知道怎么做吗?
答案 0 :(得分:0)
更改func如下:
func labelLongPressed(_ sender: UITapGestureRecognizer){
print("Label Long pressed")
let labelCell: TTTLabelCell = sender.view // track as per your view hierarchy
labelCell.backgroundColor = UIColor.blue
}
答案 1 :(得分:0)
首先,我建议将手势识别器添加到单元格本身而不是文本标签。这为用户提供了更大的分接区域,并且在识别长按时更容易引用单元格。
labelCell.addGestureRecognizer(longPressRec)
为手势动作添加参数,以传递手势识别器。然后我们可以使用识别器的视图来获取对单元格的引用 - 因为我们将手势识别器直接添加到单元格中。
func labelLongPressed(_ recognizer: UIGestureRecognizer) {
guard recognizer.state == .began else { return }
print("Label Long press began!")
if let labelCell = recognizer.view as? TTTLabelCell {
labelCell.backgroundColor = .blue
}
}
最后,在将目标添加到手势识别器时,更新选择器以匹配我们的功能签名。
longPressRec.addTarget(self, action:#selector(labelLongPressed(_:)))