gpt4 book ai didi

ios - 如何在 CollectionView 中选择单个单元格并取消选择所有其他单元格

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:25:17 26 4
gpt4 key购买 nike

**

I have horizontal CollectionView in which selected cell have orange gradient color and all other deselected cells gray color i m using only didselect delegate method but i am getting problem of multiple cells selected and i have problem with same concept in table view while scrolling and i have searched a lot but i have not get proper answer of cell reusability

**

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{


DateTimeCell * cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"DateTimeCellID" forIndexPath:indexPath];



if (self.selectedIndexPath != nil && indexPath == self.selectedIndexPath)
{

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = cell.mainView.bounds;
gradient.startPoint = CGPointZero;

gradient.endPoint = CGPointMake(1, 1);
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:238.0/255.0 green:42.0/255.0 blue:123/255.0 alpha:1.0] CGColor],(id)[[UIColor colorWithRed:241.0/255.0 green:90.0/255.0 blue:41.0/255.0 alpha:1.0] CGColor], nil];
[gradient setMasksToBounds:NO];
cell.mainView.backgroundColor = [UIColor clearColor];
[cell.mainView.layer insertSublayer:gradient atIndex:0];

[indexPaths addObject:self.selectedIndexPath];

}
else
{
[cell.mainView setBackgroundColor:[self colorWithHexString:@"383F4A"]];
}

return cell;
}

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


indexPaths = [NSMutableArray arrayWithObjects:indexPath, nil];

if (self.selectedIndexPath)
{
// if we had a previously selected cell

if ([indexPath compare:self.selectedIndexPath] == NSOrderedSame)
{
// if it's the same as the one we just tapped on, then we're unselecting it

NSLog(@"Selected");

}
else
{
// if it's different, then add that old one to our list of cells to reload, and
// save the currently selected indexPath

[indexPaths addObject:self.selectedIndexPath];
self.selectedIndexPath = indexPath;
}
}
else
{
// else, we didn't have previously selected cell, so we only need to save this indexPath for future reference

self.selectedIndexPath = indexPath;

}



dispatch_async(dispatch_get_main_queue(), ^{
[collectionView reloadItemsAtIndexPaths:indexPaths];
});


}

最佳答案

采用如下所示的全局 selectedIndexPath

NSIndexPath *selectedIndexPath = [[NSIndexPath alloc] indexPathForRow:0 inSection:0];

在委托(delegate)方法中写下代码

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{


DateTimeCell * cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:@"DateTimeCellID" forIndexPath:indexPath];

if self.selectedIndexPath == indexPath
{
// do what you want to do with your selected cell
}
else
{
// do what you want to do with your deselected cell
}


return cell;
}

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

self.selectedIndexPath = indexPath
[self.collectionView reloadData];


}

关于ios - 如何在 CollectionView 中选择单个单元格并取消选择所有其他单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42592767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com