我在使用UICollectionView
重新加载数据时出现问题。我在viewDidLoad
上有这个数组来填充UICollectionView.
array = [[NSMutableArray alloc] init];
[array addObject:@"1"];
[array addObject:@"2"];
[array addObject:@"3"];
[array addObject:@"4"];
[array addObject:@"5"];
[array addObject:@"6"];
和方法:
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellIdentifier = @"Cell";
//cell = [[UICollectionViewCell alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
myCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 0, 100, 20)];
[titleLabel setText:[array objectAtIndex:indexPath.row]];
titleLabel.textColor = [UIColor whiteColor];
titleLabel.backgroundColor = [UIColor clearColor];
[cell addSubview:titleLabel];
return cell;
}
点按UIButton
,重新加载数据:
[myCollectionView reloadData];
这里重新加载之前和之后的数据如何:
答案 0 :(得分:12)
每次点击重新加载按钮时都会添加新标签。您应该添加一次标签并根据标记更改标签文本。
这是一个简单的例子。
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
MyCell *cell = (MyCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"Cell"
forIndexPath:indexPath];
[cell setMyTextLabel:indexPath.row];
return cell;
}
其中MyCell
将包含UILabel
以及用于修改其文字的属性。
我真的建议您通过 @Ben Scheirman 查看Fun with UICollectionView代码。
希望有所帮助。
P.S。将myCell
重命名为MyCell
。一个类应该以大写字母开头。
答案 1 :(得分:1)
点击重新加载按钮时,您正在添加标签。在这种情况下,您一次又一次地添加标签......
所以有三种解决方案:
text
长度是否不等于零。在这种情况下,无需添加该标签并更改文本。答案 2 :(得分:1)
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
dispatch_async(dispatch_get_main_queue(), ^{
// ********* Changed *******
for (UIView *v in [cell.contentView subviews])
[v removeFromSuperview];
// ********** Changed **********
if ([self.collectionviewFlow.indexPathsForVisibleItems containsObject:indexPath]) {
NSString *img_name=[NSString stringWithFormat:@"%@_thumb%d.png",self.VaritiesName,(int)indexPath.row+1];
imageVw=[[UIImageView alloc]initWithImage:[UIImage imageNamed: img_name]];
imageVw.frame=CGRectMake(10,10,100,100);
[cell.contentView addSubview:imageVw];
}
});
cell.backgroundColor=[UIColor clearColor];
return cell;
}
答案 3 :(得分:0)
现在已经很晚了,但这是我的解决方案。
如果您使用自定义collectionviewcell 尝试使用' func prepareForReuse()'