ThePunisher ThePunisher - 5 months ago 46
iOS Question

UICollectionView reload data Issue

I have a problem with data reloading using

UICollectionView
. I have this array on the
viewDidLoad
to fill the
UICollectionView.


array = [[NSMutableArray alloc] init];
[array addObject:@"1"];
[array addObject:@"2"];
[array addObject:@"3"];
[array addObject:@"4"];
[array addObject:@"5"];
[array addObject:@"6"];


and the method:

-(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;
}


I tap the
UIButton
and data is reloaded:

[myCollectionView reloadData];


Here how the data looks like before and after the reload:
Before

After

Answer

You add a new label each time you tap the reload button. You should add the label once and change the label text according.

Here a simple example.

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

    MyCell *cell = (MyCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"Cell"
                                                                               forIndexPath:indexPath];
    [cell setMyTextLabel:indexPath.row];
    return cell;
}

where MyCell will contains a UILabel and a property to modify its text.

I really suggest to take a look at Fun with UICollectionView code by @Ben Scheirman.

Hope that helps.

P.S. Rename myCell to MyCell. A class should start with an uppercase letter.