У меня есть класс UICollectionViewController
, который выдает кучу ячеек. Когда пользователь касается ячейки, я хочу использовать метод touchesBegan
для предотвращения новых касаний до тех пор, пока первое касание не завершит выбор ячейки.touchsBegan не стреляет в UICollectionViewController
Я попытался поместить следующий код в контроллер своего вида, но он никогда не вызван.
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
super.touchesBegan(touches, withEvent: event)
print("touches began")
}
Однако в другом месте в моем проекте у меня есть еще один класс это подкласс UIViewController
. Там я использую touchesBegan
в следующем коде, чтобы отклонить клавиатуру для текстового представления в этом классе, и этот код получится просто отлично.
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
super.touchesBegan(touches, withEvent: event)
view.endEditing(true)
}
Почему этот код работает в одном классе, а не в другом? И как я могу использовать touchesBegan
в моем UICollectionViewController
, чтобы обнаружить штрихи на моих ячейках просмотра коллекции? Решения в Свифт были бы оценены. Спасибо за ваше время!
Исследование: Я проверил это решение: Handle Touch in UiCollectionView? Но ответы в основном относятся к этому конкретному проекту.
Я попытался использовать распознаватель жестов для запуска self.collectionView?.userInteractionEnabled = false
, но распознаватель жестов не срабатывает для selector.state == .Began
, только для .Ended
. Поэтому я не мог использовать его, чтобы предотвратить дальнейшие штрихи.
Я также пробовал использовать UILongPressGestureRecognizer
, чтобы сделать то же самое, но этот жест предотвращает стандартный жест нажатия, который прослушивают ячейки просмотра коллекции, поэтому регулярный щелчок по ячейкам так и не был получен, и поэтому ячейки не могут быть выбраны.
Я отправил обходной путь в качестве ответа, хотя он не отвечает на исходный вопрос.
Я подозреваю, что одна из ваших камер не может перенаправлять цепь ответчика. Если у вас есть пользовательские ячейки просмотра коллекции, убедитесь, что они вызывают 'super.touchesBegan ...' –
Я не знаю, почему он не звонит (я думаю, что Санта-Клаус находится на правильном пути), но вместо этого вы могли бы иметь ' var hasBeenTouched: переменная Bool', которая установлена в 'true' после первого запуска кода? Затем выполняемый код помещается в блок if ifbboutTouched == false. – Tim
@ Тим - Я попробовал эту идею. В 'collectionView (: didSelectItemAtIndexPath)', если 'hasBeenTouched == false', я устанавливаю его в' true', отключает взаимодействие с пользователем и запускает блок для обработки выбора ячейки. В конце блока я установил 'hasBeenTouched', чтобы вернуться к false и включить взаимодействие с пользователем. Но по какой-то причине все еще возможно, чтобы 2 ячейки стали выбраны одновременно, что заставляет функциональность выбора ячейки «запираться». Я не совсем понимаю, почему этот подход не работает. – peacetype