Обнаружить все прикосновения на UICollectionView - PullRequest
0 голосов
/ 23 января 2020

У меня есть UICollectionView, в котором UICollectionViewCells. Когда пользователь касается UICollectionView, я хочу получать уведомления об этом, пока он не отпустит свой палец. Я попытался создать подкласс UICollectionView следующим образом:

final class MyCollectionView: UICollectionView {
    var hasTouch = false

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesBegan(touches, with: event)
        hasTouch = true
    }

    override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesCancelled(touches, with: event)
        hasTouch = false
    }

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesEnded(touches, with: event)
        hasTouch = false
    }
}

Но это не работает, когда в пути есть ячейки, потому что они не передают свои касания представлению коллекции. Один из способов решения этой проблемы состоит в том, чтобы установить для userInteractionEnabled значение false в ячейках, но я не могу этого сделать, потому что мне нужно, чтобы значение userInteractionEnabled было истинным для ячеек. Как я могу решить это?

1 Ответ

0 голосов
/ 23 января 2020

Редизайн взаимодействия. Вы пытаетесь сделать две несовместимые вещи с видом коллекции, и плавание в гору против UIKit таким образом приведет только к слезам. Это также идет вразрез с ожиданиями ваших пользователей, которые видели много просмотров коллекций и ожидают, что они будут действовать определенным образом.

Если вы действительно настаиваете на этом, вы можете сделать следующее:

  1. установите для userInteractionEnabled значение false для ячеек.
  2. при касании, проверьте, не касались ли вы ячейки, используя indexPathForItemAtPoint: (точка, в которой было касание)
  3. при обновлении используйте indexPathforItemAtPoint, чтобы увидеть, находитесь ли вы в одной ячейке. Затем вы можете вручную справиться с «выбором ячейки»
  4. Затем сделать все остальное, что вы делаете с касаниями.

По сути, отключить userInteractionEnabled и обработать ячейку выбери сам.

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