将TableView点击位置转换为单元格视图位置

时间:2018-04-28 13:25:39

标签: ios swift uitableview uitapgesturerecognizer

我的TableView上有一个TapGestureRecognizer。 它让我得到了我点击的细胞。 接下来,我想使用抽头位置来检查单元格上的标签是否被点击。 但是我当然有相对于TableView的位置而不是CellView。 您是否知道将TableView位置(" World")转换为相应的CellView位置(" Local")的便捷方式?

非常感谢。

我的代码到目前为止。 viewDidLoad中:

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(MyTableViewController.tapEdit(recognizer:)))
        self.tableView.addGestureRecognizer(tapGesture)
        tapGesture.delegate = self

点击方法:

@objc func tapEdit(recognizer: UITapGestureRecognizer)  {

        if recognizer.state == UIGestureRecognizerState.ended {

            let tapLocation = recognizer.location(in: self.tableView)

            if let tapIndexPath = self.tableView.indexPathForRow(at: tapLocation) {

                print("Tap Location: \(tapLocation)")
                if let cell = self.tableView.cellForRow(at: tapIndexPath) as? MyTableViewCell {

                    // of course not working because of the relative location difference
                    if cell.myLabel.frame.contains(tapLocation) {
                        print("Taped cell at \(tapIndexPath). Hit Label.")
                    }

                }

            }

        }

    }

此致

1 个答案:

答案 0 :(得分:1)

如果您想拥有该单元格的局部坐标,最简单的方法是使用它来获取该单元格的位置:

@objc func tapEdit(recognizer: UITapGestureRecognizer)  {

    if recognizer.state == UIGestureRecognizerState.ended {

        let tapLocation = recognizer.location(in: self.tableView)

        if let tapIndexPath = self.tableView.indexPathForRow(at: tapLocation) {

            print("Tap Location: \(tapLocation)")
            if let cell = self.tableView.cellForRow(at: tapIndexPath) as? MyTableViewCell {
                let localLocation = recogniser.location(in: cell)
                // of course not working because of the relative location difference
                if cell.myLabel.frame.contains(localLocation) {
                    print("Taped cell at \(tapIndexPath). Hit Label.")
                }

            }

        }

    }

}