将对象传递给选择器

时间:2017-04-19 11:16:50

标签: ios swift uigesturerecognizer

我使用此代码来检测长按元素:

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(),这将允许我更改一些属性。你知道怎么做吗?

2 个答案:

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