在选择器操作中传递参数

时间:2017-03-15 04:31:15

标签: swift3 uigesturerecognizer selector

我尝试使用传递参数的动作创建一个长按手势识别器但是我遇到了这个错误:

  

'#selector'的参数不是指'@objc'方法,属性,   或初始化程序

我到目前为止唯一尝试的是在@objc函数的开头添加removeDate,因为另一篇帖子没有运气。

let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(removeDate(deleteIndex: 3)))
            longPressRecognizer.minimumPressDuration = 1.00
            cell.addGestureRecognizer(longPressRecognizer)

func removeDate(deleteIndex: Int) {
    if deleteIndex != 0 {
        dates.remove(at: deleteIndex - 1)
    }
}

1 个答案:

答案 0 :(得分:1)

您无法通过GestureRecognizer操作传递任何其他对象,它将允许您传递唯一的UIGestureRecognizer对象。如果你想要长按单元格的索引,那么你可以尝试这样。

首先设置UILongPressGestureRecognizer这样的动作。

let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(removeDate(_:)))
longPressRecognizer.minimumPressDuration = 1.00
cell.addGestureRecognizer(longPressRecognizer)

现在就像这样设置removeDate动作。

func removeDate(_ gesture: UILongPressGestureRecognizer) {
    if gesture.state == .began {
        let touchPoint = gesture.location(in: self.tableView)
        if let indexPath = self.tableView.indexPathForRow(at: touchPoint) {
            print(indexPath)
            dates.remove(at: indexPath.row)
            self.tableView.reloadData()
        }
    }
}