UICollectionView selectItemAtIndexPath не вызывает didSelectItemAtIndexPath

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

[_collectionView selectItemAtIndexPath:[NSIndexPath indexPathForItem:currentSelectedVideo inSection:0] animated:YES scrollPosition:UICollectionViewScrollPositionNone];

По какой-то причине функции:

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 

-(void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath

Не вызываются, и поэтому визуальный эффект, который я использую для отображения выбранной ячейки, не отображается на экране.

Это правильное поведение?

Ответ 1

Да, это правильное поведение. Документация для [selectItemAtIndexPath: animated: scrollPosition:] говорит:

Этот метод не вызывает вызовы методов-делегатов, связанных с выбором.

Ответ 2

Вы можете это сделать.

[self.collectionView selectItemAtIndexPath:indexPath animated:YES scrollPosition:UICollectionViewScrollPositionNone];
[self collectionView:self.collectionView didSelectItemAtIndexPath:indexPath];

Если используется только selectItemAtIndexPath: анимированный: scrollPosition: метод, не вызывайте метод делегата. если использование только коллекцияView: сделалSelectItemAtIndexPath: метод, не работает стабильный

счастливый код:)

Ответ 3

Ответ Osmenda в Swift с моим пользовательским представлением коллекции:

self.collectionView(calendarCV, didSelectItemAtIndexPath: indexPath)