Как узнать, какая конкретная строка в UITableView получила событие принудительного прикосновения? - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь реализовать 3D Touch на UITableView.Следующий код внутри вложенного UITableView работает:

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch = touches.first!
    if touch.force <= (touch.maximumPossibleForce / 2) {
        super.touchesBegan(touches, with: event)
    }
    else {
        print("force touch called !!!")
    }
}

Однако, как я узнаю, какая конкретная строка в таблице подвергается принудительному касанию?

Touch.viewидентифицируется как объект «UITableViewCellContentView» во время отладки, но этот класс не существует в UIKit.Приведение его вызывает «Не удалось привести значение типа« UITableViewCellContentView »(0x107cbab80) к« UITableViewCell »(0x107cbab30)».ошибка времени выполнения.

Как узнать, какая конкретная строка в UITableView получила событие принудительного прикосновения? Я использую Swift 4.2 и iOS 12.1.

Спасибо!

1 Ответ

0 голосов
/ 19 февраля 2019

Представление содержимого - это представление внутри ячейки, вы не можете просто привести его к UITableViewCell, так как это не связанный тип.

Вы можете использовать indexPathForRow(at:)преобразовать CGPoint в IndexPath.Вам нужно будет преобразовать точку касания в системе координат табличного представления, а не в представлении содержимого.

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch = touches.first!
    if touch.force <= (touch.maximumPossibleForce / 2) {
        super.touchesBegan(touches, with: event)
    }
    else {
        print("force touch called !!!")
        let tablePoint = touch.location(in:self)
        if let indexPath = self.indexPathForRow(at:tablePoint) {
            print("\(indexPath.row) touched")
        }
    }
}

В зависимости от того, что вы пытаетесь сделать, вам может быть прощеуправляйте принудительным касанием в вашем контроллере вида через registerForPreviewing и UIViewControllerPreviewingDelegate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...