识别长抽头UITableViewCell的真正indexPath

时间:2018-06-05 11:22:18

标签: ios swift uitableview

我正在尝试检测集合视图中的长抽头表格视图单元格。

我有我的主视图控制器(MainVC类),它包含一个CollectionView(CollectionViewController类)。集合视图为每个单元格都有一个标签和一个TableView(TableViewController类)。 集合视图委托方法在MainVC中实现,tableView委托方法在CollectionViewController类中实现。

我试图在长时间点击时检测tableViewCell indexPath(以获取它的内容)。

执行检测的代码(Inside CollectionViewController):

override func awakeFromNib() {
        super.awakeFromNib()
        let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(self.longTapped(longPressGestureRecognizer:)))
        longPressRecognizer.delegate = self
        self.addGestureRecognizer(longPressRecognizer)
    }

func longTapped(longPressGestureRecognizer: UILongPressGestureRecognizer) {
    if longPressGestureRecognizer.state == UIGestureRecognizerState.began {
        let touchPoint = longPressGestureRecognizer.location(in: self)

        if let indexPath = self.eventsTableView.indexPathForRow(at: touchPoint) {
            print(indexPath.row) //print the current *displayed* cell index
        }
    }
}

系统识别长按,但我遇到了问题。这段代码:

let indexPath = self.tableView.indexPathForRow(at: touchedPoint)

假设识别抽头单元indexPath,似乎找到当前显示的抽头单元索引。我的意思是如果设备当前没有显示20个单元格,indexPathForRow将忽略它们,并仅计算显示的单元格。 因此,例如,如果我在表视图上有30行,并且用户当前正在查看第23行中的单元格,系统将认为该单元格(例如)在第4行中,因为它是第4个单元格目前显示。

我不知道是否与此tableView位于集合视图中的事实存在关联,但我希望这些额外信息可以帮助您(

非常感谢!

2 个答案:

答案 0 :(得分:1)

试试这个:

var longpress = UILongPressGestureRecognizer()

override func viewDidLoad() {
        super.viewDidLoad()
        longpress = UILongPressGestureRecognizer(target: self, action: #selector(self.longPressGestureRecognized))
        tableView.addGestureRecognizer(longpress)
 }

@objc func longPressGestureRecognized(gestureRecognizer: UIGestureRecognizer) {
        let longPress = gestureRecognizer as! UILongPressGestureRecognizer
        if longPress.state == UIGestureRecognizerState.began {
            let locationInTableView = longPress.location(in: tableView)
            let indexPath = tableView.indexPathForRow(at: locationInTableView)
            print(indexPath?.row ?? "-0")
        }
}

答案 1 :(得分:-1)

didSelectRowAtIndexPath我认为会在你的帮助下。检查它是什么,在使用之前不要忘记委托tableView