Ответ 1
Вы уверены, что не случайно переопределяете - (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
? "Select" vs. "deselect" в прошлом сработал с завершением кода Xcode.
У меня есть UICollectionView, размер которого зависит от размера экрана. Отображаемый UICollectionViewCells имеет тот же размер, что и collectionView. Каждая ячейка имеет UIImage, который является размером ячейки. В CollectionView включен пейджинг, поэтому по существу это полноэкранное слайд-шоу фотографий, которое пользователь может пронести.
Проблема заключается в том, что
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
вызывается только в том случае, если пользователь постукивает двумя пальцами по ячейке или долго нажимает одним пальцем, а затем отпускает. Кажется, что по умолчанию нет выбора одного нажатия. Я не внес никаких изменений в распознаватель жестов CollectionView, поэтому у меня возникли проблемы с поиском решения этой проблемы.
Вы уверены, что не случайно переопределяете - (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
? "Select" vs. "deselect" в прошлом сработал с завершением кода Xcode.
У меня была такая же проблема, и оказалось, что в UIView
, содержащем UICollectionView
, был UITapGestureRecognizer
, и он отвечал вместо этого.
Это объясняет, почему didSelectItemAtIndexPath
работает только в том случае, если пользователь нажимает двумя пальцами или длинными нажатиями одним пальцем, потому что это не вызывает UITapGestureRecognizer
.
Итак, проверьте все UITapGestureRecognizer
, которые вы получили там, но не обязательно на UICollectionView
, но он может быть на любом UIView
, содержащем его.
Если у вас есть представление о ячейке, которая препятствует разрешению содержимого содержимого ячеек, то вы не сможете подключиться к обратному вызову делегата для ячейки.
Вы хотите отключить взаимодействие пользователя с препятствующим представлением либо в NIB, либо в коде.
view.userInteractionEnabled = NO;
Просто добавьте к уже разрешенному вопросу еще одну ситуацию, при которой жест привязки может не работать, поскольку это продолжало мучить меня.
Если вы вернетесь false
в пределах UICollectionViewDelegate'
collectionView:shouldHighlightItemAtIndexPath:
, жест выделения не будет функционировать, а collectionView:didSelectItemAtIndexPath:
не будет вызываться. Возвращаемое по умолчанию значение этого метода-делегата true
, поэтому у вас не возникнет проблема, если вы не реализуете его намеренно.
Я сам столкнулся с этой проблемой. Первоначально у меня были кнопки и ярлыки, затем я реорганизовал свой пользовательский интерфейс и превратил эти кнопки/метки в ячейки для UICollectionView
.
В конце концов я понял, что кнопки потребляют мои краны. Я бездумно переместил свои оригинальные кнопки в камеру и не превратил ее в прямую UIImage
. Я уничтожил действия, связанные с кнопками, и просто искал выбор ячеек, поэтому я взял время, чтобы понять это.
Глупо и очевидно в ретроспективе, но мне потребовалось пару часов, чтобы понять, что я сделал.
У меня была одна и та же проблема... Я был основным прикосновениемBegan в представлении CollectionCell, и это привело к тому, что didSelectItemAtIndexPath не срабатывал, когда я касался ячейки. Удалено переопределение и все сработало.
Я столкнулся с этой проблемой в Swift 3 и xcode 8, у меня было представление и представление коллекции внутри этого. В представлении коллекции есть userInteractionEnabled для true, но он все еще не работает. Исправлена эта проблема путем переопределения ifHighlightItemAt, у меня нет любая дополнительная/пользовательская реализация в этом методе, поэтому я не переопределял этот метод. После добавления нижеприведенного кода вызывается метод didSelectItem.
func collectionView(_ collectionView: UICollectionView, shouldHighlightItemAt indexPath: IndexPath) -> Bool {
return true
}
Если вы используете только didselect:
self.collectionView.allowsMultipleSelection = false
Или удалите эту строку.
Мне довелось наткнуться на эту проблему, и это расстроило меня один долгий день, пока я не нашел это Вам просто нужно снять флажок "Включение пользователя" , когда я выбрал ячейку в левом верхнем углу коллекции CollectionView в Storyboard. и проблема решена
Не забудьте добавить UICollectionViewDataSource, UICollectionViewDelegate в класс