Select/Deselect 单元格的 UICollectionView 问题

UICollectionView issue with Select/Deselect cell

大家好,我对我收集的 select 细胞离子有疑问。 为了管理selection和deselection,当然我提供了委托方法didSelectItemAtIndexPathdidDeselectItemAtIndexPath

一切正常,但我遇到了无法解决的问题。简而言之,当我 select 编辑一个单元格时,我希望有可能通过重新 select 编辑单元格本身来删除 select 最后一个单元格 selected ...例如

我会为单元格起一个名字,以便您更好地理解我的问题

用户select将单元格“22”删除select。我希望用户再次重新 select 单元格 22 并 deselect 它。

我尝试使用 allowMultipleSelection = YES,这似乎是我喜欢的系统,但问题是单元格没有重新select编辑,所有其他条目 selected等错了...我该如何解决这个问题...??

这是我用于 select 和 deselect 单元格

的代码
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {

    SmartCalendarDayCell *calendarDayCell = (SmartCalendarDayCell *)[self.dayCollectionView cellForItemAtIndexPath:indexPath];
    calendarDayCell.day.textColor = [UIColor colorWithHexString:@"#D97E66" setAlpha:1];
}

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

    SmartCalendarDayCell *calendarDayCell = (SmartCalendarDayCell *)[self.dayCollectionView cellForItemAtIndexPath:indexPath];
    calendarDayCell.day.textColor = [UIColor lightGrayColor];    
}

据我了解,您希望 collectionView 一次只能 select 1 个单元格,如果再次单击 selected 单元格,它将被删除select编辑。如果我有什么误解,请告诉我。

第一

  • 您不应在 didSelectItemAtIndexPathdidDeselectItemAtIndexPath 方法中更改 textColorday。因为当您滚动 collectionView 时,单元格将被重复使用并且 day 的颜色对于某些单元格来说是错误的。
  • 要解决它,使用property selected of UICollectionViewCell

    SmartCalendarDayCell.m

    - (void)setSelected:(BOOL)selected {
      [super setSelected:selected];
    
      if (selected) {
        self.day.textColor = [UIColor colorWithHexString:@"#D97E66" setAlpha:1];
      } else {
        self.day.textColor = [UIColor lightGrayColor];
      }
    }
    

第二

  • 要删除select select单元格,您应该检查并使用collectionView:shouldSelectItemAtIndexPath:方法进行。

    - (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath {
      if ([collectionView.indexPathsForSelectedItems containsObject:indexPath]) {
        [collectionView deselectItemAtIndexPath:indexPath animated:NO];
        return NO;
      }
    
      return YES;
    }
    

有关更多详细信息,您可以查看我的演示 repo here