Chi*_*jar 7 ios uicollectionview
这是代码正常工作,但当我将滚动我的集合视图,然后另一个单元格也被选中,例如18个图像可用,并在运行时首先显示六个,当我将选择任何一个六个然后也选择另一个2单元格我在这里混淆为什么已选择另外两个单元格请给我解决方案

在这里,我在主要展示故事板上采取了6个单元格
UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout*)self.collectionView.collectionViewLayout;
flowLayout.minimumLineSpacing = 15;
CGFloat availableWidthForCells = CGRectGetWidth(self.collectionView.frame) - flowLayout.sectionInset.left - flowLayout.sectionInset.right - flowLayout.minimumInteritemSpacing *2;
cellWidth = availableWidthForCells /6;
NSLog(@"cellWidth:%f",cellWidth);
flowLayout.itemSize = CGSizeMake(cellWidth, cellWidth);
Run Code Online (Sandbox Code Playgroud)
这是我的Didselect和didDeselect方法
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
UICollectionViewCell* cell = [collectionView cellForItemAtIndexPath:indexPath];
cell.layer.cornerRadius = cellWidth / 2.0;
cell.layer.backgroundColor = [UIColor blackColor].CGColor;
NSLog(@"INDEXPATH:-%ld",(long)indexPath.row);
}
-(void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath{
UICollectionViewCell* cell = [collectionView cellForItemAtIndexPath:indexPath];
cell.layer.cornerRadius = cellWidth / 2.0;
cell.layer.backgroundColor = [UIColor whiteColor].CGColor;
}
Run Code Online (Sandbox Code Playgroud)
Alb*_*ini 10
发生这种情况是因为collectionView重用了单元格;
您应该将选定单元格的IndexPath存储在变量中:
@property (nonatomic, retain) NSIndexPath *selectedIndexPath;
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell* cell = [collectionView cellForItemAtIndexPath:indexPath];
cell.layer.backgroundColor = [UIColor blackColor].CGColor;
NSLog(@"INDEXPATH:-%ld",(long)indexPath.row);
self.selectedIndexPath = indexPath
}
-(void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath{
UICollectionViewCell* cell = [collectionView cellForItemAtIndexPath:indexPath];
cell.layer.backgroundColor = [UIColor whiteColor].CGColor;
self.selectedIndexPath = nil
}
Run Code Online (Sandbox Code Playgroud)
而不是"indexPath中的行的单元格"检查:
var selectedIndexPath: IndexPath?
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath)
cell.layer.backgroundColor = UIColor.black
self.selectedIndexPath = indexPath
}
func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath)
cell.layer.backgroundColor = UIColor.white
self.selectedIndexPath = nil
}
Run Code Online (Sandbox Code Playgroud)
小智 7
感谢Alberto Scampini这段代码为swift 3.1
var selectedIndexPath: IndexPath?
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = self.collectionView.dequeueReusableCell(withReuseIdentifier: "SegmentChoiceCVCell", for: indexPath) as! SegmentChoiceCVCell
//configure cell
if selectedIndexPath != nil && indexPath == selectedIndexPath {
cell.checkIcon.backgroundColor = UIColor.black
}else{
cell.checkIcon.backgroundColor = UIColor.white
}
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath) as! SegmentChoiceCVCell
cell.checkIcon.backgroundColor = UIColor.black
self.selectedIndexPath = indexPath
}
func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
let cell: SegmentChoiceCVCell = collectionView.cellForItem(at: indexPath) as! SegmentChoiceCVCell
cell.checkIcon.backgroundColor = white
selectedIndexPath = nil
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11449 次 |
| 最近记录: |