2017-04-19 31 views
0

我使用该代码来检测一个长按压元件:通行证对象到选择

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

使用这种'longPressRec.addTarget(自我,动作:#selector(labelLongPressed :))' –

+0

@dahiya_boy中,OP是要求通过表格单元格。该代码只通过长按识别器。 – dfd

回答

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 
    } 
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(_:)))