События касания в ячейках иногда не вызываются перед переходом к другому контроллеру представления - PullRequest
0 голосов
/ 16 июня 2020

В контроллере A в методе collectionView didSelectItemAt я перехожу к другому контроллеру представления B:

navigationController?.pushViewController(newControllerB, animated: true)

Ничего особенного, но проблема в том, что когда вы нажимаете на ячейку, а затем быстро go обратно к контроллер A, повторите это несколько раз - методы collectionView didHighlightItemAt и didUnhighlightItemAt иногда просто не вызываются!

В didHighlightItemAt мне нужно уменьшить ячейку:

cell.transform = CGAffineTransform(scaleX: 0.95, y: 0.95)

и в didUnhighlightItemAt для отмены сжатия:

cell.transform = .identity

Я поместил следующий метод в свой класс ячейки, чтобы узнать, получает ли он события касания:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("touches began")
        super.touchesBegan(touches, with: event)
    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("touches ended")
        super.touchesEnded(touches, with: event)
    }

    override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("touches cancelled")
        super.touchesCancelled(touches, with: event)
    }

Из того, что я вижу - иногда все методы называются, иногда некоторые из них, иногда ни один из них. Это приводит к тому, что мои ячейки иногда остаются подсвеченными, когда я go возвращаюсь к A, иногда не выделяются, когда я нажимаю на них, и go к B.

Я предполагаю, что проблема в основном потоке, это просто перегружен чем-то еще, и поэтому мой collectionView не получает событий касания, а didHighlightItemAt / didUnhighlightItemAt не вызывается. Но есть ли простой способ это проверить? Здесь так много модулей / контроллеров представлений / классов, упакованных друг в друга, что довольно сложно понять, что блокирует основной поток от вызова этих методов.

Любые советы по этому вопросу будут оценены.

...