Select/Deselect 单元格的 UICollectionView 问题
UICollectionView issue with Select/Deselect cell
大家好,我对我收集的 select 细胞离子有疑问。
为了管理selection和deselection,当然我提供了委托方法didSelectItemAtIndexPath
和didDeselectItemAtIndexPath
一切正常,但我遇到了无法解决的问题。简而言之,当我 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编辑。如果我有什么误解,请告诉我。
第一
- 您不应在
didSelectItemAtIndexPath
和 didDeselectItemAtIndexPath
方法中更改 textColor
或 day
。因为当您滚动 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。
大家好,我对我收集的 select 细胞离子有疑问。
为了管理selection和deselection,当然我提供了委托方法didSelectItemAtIndexPath
和didDeselectItemAtIndexPath
一切正常,但我遇到了无法解决的问题。简而言之,当我 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编辑。如果我有什么误解,请告诉我。
第一
- 您不应在
didSelectItemAtIndexPath
和didDeselectItemAtIndexPath
方法中更改textColor
或day
。因为当您滚动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。