В контроллере 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 не вызывается. Но есть ли простой способ это проверить? Здесь так много модулей / контроллеров представлений / классов, упакованных друг в друга, что довольно сложно понять, что блокирует основной поток от вызова этих методов.
Любые советы по этому вопросу будут оценены.