didSelectItemAtIndexPath / didDeselectItemAtIndexPath в PSTCollectionView в iOS

Я работаю с UICollectionView с помощью PSTCollectionViewБиблиотека. Я должен создать сетку, где пользователь может выбрать и отменить выбор изображений, нажав на UICollectionViewCell, Я должен показать checkBox как изображение, если выбрана ячейка. И uncheckedBox изображение, если ячейка не выбрана. Я могу выбрать cell и отобразите изображение флажка. И также можете отменить выбор. Но когда я выбираю следующий cellпредыдущий отмененcell также выбирается и показывает изображение checkBox. Это метод, который я объявил в UICollectionViewCell подкласс

 -(void)applySelection{
    if(_isSelected){
        _isSelected=FALSE;
        self.contentView.backgroundColor=[UIColor whiteColor];
        self.selectImage.image=[UIImage imageNamed:@"unchecked_edit_image.png"];
    }else{
        _isSelected=TRUE;
        self.contentView.backgroundColor=[UIColor whiteColor];
        self.selectImage.image=[UIImage imageNamed:@"checked_edit_image.png"];
    }
}

И вот мой код для didSelectItemAtIndexPath а такжеdidDeselectItemAtIndexPath

- (void)collectionView:(PSTCollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"didSelect method called");
    FriendImageCell *cell = (FriendImageCell*)[imageGrid cellForItemAtIndexPath:indexPath];
        [selectedImages addObject:[[list objectAtIndex:indexPath.item] objectForKey:@"thumbnail_path_150_150"]];
         [cell applySelection];

}

- (void)collectionView:(PSTCollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"did deselect called");
    FriendImageCell *cell = (FriendImageCell*)[imageGrid cellForItemAtIndexPath:indexPath];
    [selectedImages removeObjectAtIndex:indexPath.item];
    [cell setSelected:NO];
    [cell applySelection];
}

Может кто-нибудь, пожалуйста, дайте мне понять, что не так с моим кодом? Сделай мне правильно, если я делаю что-то не так. Перепробовал много ответов о переполнении стека, но ничего не получалось. Любая помощь будет оценена. Заранее спасибо.

1 ответ

Решение

После нескольких дней обсуждения. Думаю, я наконец понял, в чем твоя проблема. Вы, должно быть, забыли установить allowsMultipleSelection в YES, Поэтому при выборе новой ячейки ваши предыдущие ячейки отменяются.

allowsMultipleSelection

Это свойство определяет, можно ли выбрать несколько элементов одновременно. Значение по умолчанию этого свойства - НЕТ.

И в моем предыдущем ответе я также предложил вам создать свой собственный логический массив для отслеживания выбранных элементов. Тем не менее, я просто понял, что вам не нужно. indexPathsForSelectedItems дает вам массив выбранных индексных путей.

indexPathsForSelectedItems

Массив объектов NSIndexPath, каждый из которых соответствует одному выбранному элементу. Если выбранных элементов нет, этот метод возвращает пустой массив.

На самом деле, вам даже не нужно реализовывать didSelectItemAtIndexPath, а также didDeselectItemAtIndexPath, По умолчанию эти два метода делегата будут вызывать setSelected: для тебя. Поэтому более подходящий способ сделать это applySelection код для setSelected,

Перезаписать setSelected: метод в вашем обычае UICollectionViewCell,

- (void)setSelected:(BOOL)selected
{
    [super setSelected:selected];

    // Change your UI
    if(_isSelected){
        self.contentView.backgroundColor=[UIColor whiteColor];
        self.selectImage.image=[UIImage imageNamed:@"unchecked_edit_image.png"];
    }else{
        self.contentView.backgroundColor=[UIColor whiteColor];
        self.selectImage.image=[UIImage imageNamed:@"checked_edit_image.png"];
    }
}
Другие вопросы по тегам