При выборе «Удалить» в ячейке UITableView, но не вызывается «commit editStyle» - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть следующее -

    class BTTableView: UITableView, UITableViewDelegate, UITableViewDataSource

С помощью этих методов -

    public func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        return true
    }

    public func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
        return .delete
    }

    public func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath)
    {
        print("editingStyle")
    }

Когда я проводил пальцем по ячейке, опция «Удалить» показывает, как и ожидалось - Показанное действие удаления

Если при нажатии I -

  1. удалить указанный выше метод с параметром 'commit editStyle' не вызывается,
  2. проведите пальцем влево по всемПри переходе к Delete, вместо того, чтобы останавливаться, когда появляется Delete, вызывается метод.

Мне кажется, этот метод будет вызываться как с # 1, так и с # 2.

Может ли кто-нибудь помочь мне понять, что я сделал неправильно?

РЕДАКТИРОВАТЬ - С помощью ввода DonMag решена проблема с:

     override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        if let hitView = super.hitTest(point, with: event) {
            let isSwipeButton = String(describing: type(of: hitView)) ==  "UISwipeActionStandardButton"
            if hitView.isKind(of: BTTableCellContentView.self)  || isSwipeButton {
                return hitView
            }
        }
        return nil;
    }

Ответы [ 2 ]

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

Похоже, commit не вызывается, потому что этот класс переопределяет hitTest:

override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
    if let hitView = super.hitTest(point, with: event) , hitView.isKind(of: BTTableCellContentView.self) {
        return hitView
    }
    return nil;
}

и возвращает nil, потому что hitView - это кнопка действия.

Простое удаление может / вызовет проблемы (первое, что заметил, что «выпадающий» не закрывается при нажатии вне его).

Так что вам нужно будет отредактировать эту функцию ... можетвозьмите немного работы, но это место для начала.

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

Скорее всего вы забыли написать:

self.delegate = self
self.dataSource = self
...