gpt4 book ai didi

ios - UICollectionView 在重新加载时更改项目顺序

转载 作者:行者123 更新时间:2023-11-29 03:07:44 25 4
gpt4 key购买 nike

我在 UICollectionView 上遇到了一个非常奇怪的问题。每当我尝试通过 [mycollectopn reloaddata] 重新加载我的 Collection View 时,项目顺序就会发生变化。

例如,我的 Collection View 中有 9 个项目,mybutton1 在项目 0 处,但每当我重新加载 Collection View 时,mybutton1 都会转到第 6 个位置,并且与所有其他项目的行为相同。

有人遇到过同样的问题吗?任何帮助将不胜感激。这就是我所做的

-(NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView {
return 1;
}

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return [BtnImgArray count];
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *myCell = [collectionView
dequeueReusableCellWithReuseIdentifier:@"collection"
forIndexPath:indexPath];

UIButton *btn = (UIButton *)[myCell viewWithTag:10];
btn.tag = indexPath.row;



[btn setImage:[UIImage imageNamed:[BtnImgArray objectAtIndex:indexPath.row]] forState:UIControlStateNormal];
[btn setImage:[UIImage imageNamed:[BtnImgArraySelected objectAtIndex:indexPath.row]] forState:UIControlStateSelected];

btn.titleLabel.textAlignment = NSTextAlignmentCenter;

if (indexPath.item==0 && ModeOfSpa == 0)
{

[btn setSelected:true];
[btn setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];

}
else if(indexPath.row ==1 && ModeOfSpa == 1)
{

[btn setSelected:true];
[btn setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];


}
else
{
btn.titleLabel.textColor = [UIColor whiteColor];
}

if (indexPath.item== 4) {

[btn setTitle:[NSString stringWithFormat:@"%@\n%@",@"All On", @"Mode"] forState:UIControlStateNormal];
}
else if (indexPath.item== 5) {

[btn setTitle:[NSString stringWithFormat:@"%@\n%@",@"Clean", @"Mode"] forState:UIControlStateNormal];
}
else{

NSString * str = [detailvwlblArray objectAtIndex:indexPath.row];
[btn setTitle:[str substringFromIndex:9] forState:UIControlStateNormal];
}

[btn addTarget:self action:@selector(BtnClicked:) forControlEvents:UIControlEventTouchUpInside];
return myCell;
}

viewWillAppear中,我使用了[myCollectionView ReloadData]

最佳答案

这是你的逻辑错误。最初,您的按钮被标记为“10”,第一次使用单元格时,您会使用该标记获得按钮:

UIButton *btn = (UIButton *)[myCell viewWithTag:10];

但是你改变了标签:

btn.tag = indexPath.row;

因此,下次您尝试获取它时,您将无法获取它,并且您的任何更新都不起作用。

快速但肮脏的解决方案:当单元格从显示器上移除时重置标签。使用 tableView:didEndDisplayingCell:forRowAtIndexPath:,您可以在其中获取带有标签索引路径的按钮并将其重置为 10

正确的解决方案:不要使用标签,在按钮、单元格和 Controller 之间设置适当的关系,以便您知道被点击的索引路径。

关于ios - UICollectionView 在重新加载时更改项目顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22575809/

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