Преобразовать местоположение касания TableView в местоположение представления ячейки - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть TapGestureRecognizer на моем TableView. Мне досталась клетка, на которую я постучал. Далее я хочу использовать местоположение, к которому подключен, чтобы проверить, не был ли ярлык на ячейке повернут. Но, конечно, у меня есть расположение относительно 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 голосов
/ 28 апреля 2018

Самый простой способ, если вы хотите получить локальную координату этой ячейки, вы должны использовать ее для определения местоположения этого крана:

@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.")
                }

            }

        }

    }

}
...