0

I'm currently facing a problem where my collectionView changes the order of my items when they scroll off the screen and switches the selected cell. At the moment they're organized so that they scrolls vertically (and there are two items side by side):

enter image description here

Here is my - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath method:

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

    static NSString *identifier = @"FriendCell";
    FriendsCell *cell = (FriendsCell *)[collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

    //Friend Object
    PFUser *friend = [self.friendsArray objectAtIndex:indexPath.item];
    cell.friendId = currentFriend.objectId;

    //Setup Cell
    if (!cell.isSelected) {
        cell.layer.backgroundColor = [UIColor whiteColor].CGColor;
    } else {
        cell.layer.backgroundColor = FlatGreen.CGColor;
    }

    //Set Profile Image
    if (!cell.profileImageView) {
        cell.profileImageView = [UIImageView new];
        cell.profileImageView.image = [UIImage imageNamed:@"ProfileImagePlaceholder"];
        [cell addSubview:cell.profileImageView];
    }

    //Set Username
    if (!cell.usernameLabel) {
        //Set Username Label
        cell.usernameLabel = [UILabel new];
        cell.usernameLabel.text = friend[@"username"];
        cell.usernameLabel.textColor = [UIColor lightGrayColor];
        [cell addSubview:cell.usernameLabel];

    } else {
        if (cell.isSelected) {
            cell.usernameLabel.textColor = [UIColor whiteColor];
        } else {
            cell.usernameLabel.textColor = [UIColor lightGrayColor];
        }
    }

    return cell;
}

didSelectItemAtIndexPath:

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

//Determine the selected friend by using the indexPath
PFUser *selectedFriend = [self.friendsArray objectAtIndex:indexPath.item];

//Add the selected friend's objectId to our array
[self.friendsToAdd addObject:selectedFriend.objectId];

//Show Selected View
FriendsCell *currentCell = (FriendsCell *)[collectionView cellForItemAtIndexPath:indexPath];

//Animate
[UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{

    //Update
    currentCell.layer.backgroundColor = FlatGreen.CGColor;
    currentCell.profileImageView.alpha = 0.0;
    currentCell.usernameLabel.textColor = [UIColor whiteColor];

} completion:nil];

} 

didDeselectItemAtIndexPath:

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

    //Determine the selected friend by using the indexPath
    PFUser *deselectedFriend = [self.friendsArray objectAtIndex:indexPath.item];

    //Remove the deselected friend's objectId from our array
    [self.friendsToAdd removeObject:deselectedFriend.objectId];

    //Show Deselected View
    FriendsCell *currentCell = (FriendsCell *)[collectionView cellForItemAtIndexPath:indexPath];

    //Animate
    [UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionTransitionFlipFromBottom animations:^{

        //Update Card
        currentCell.layer.backgroundColor = [UIColor whiteColor].CGColor;
        currentCell.profileImageView.alpha = 1.0;
        currentCell.usernameLabel.textColor = [UIColor lightGrayColor];

    } completion:nil];
}

If anyone can spot why this is happening, I'd really appreciate it!

KingPolygon
  • 4,753
  • 7
  • 43
  • 72

1 Answers1

-2

Try

dequeueReusableCellWithReuseIdentifier:nil
Prakash
  • 90
  • 1
  • 8