Going to start off by saying I've seen these questions:
iOS: UITableView mixes up data when scrolling too fast
(custom) UITableViewCell's mixing up after scrolling
Items mixed up after scrolling in UITableView
The first and last seemed very relevant to my problem, however I am fairly certain that I have logic for each section to determine what should appear in the cell (the data), and yet they still get mixed up.
The following is the relevant code:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//Note: the if (cell == nil) thing is no longer required in iOS 6
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
if (closestRenter != nil)
{
NSLog(@"CLOSEST RENTER!");
[self setupCellsWithClosestRenterCell:cell atIndexPath:indexPath];
}
else
{
NSLog(@"NO CLOSEST RENTER");
[self setupCellsWithNoClosestRenterCell:cell atIndexPath:indexPath];
}
if (indexPath.section == 0)
{
for (UIView *view in cell.contentView.subviews)
{
NSLog(@"WHAT THE HECK");
[view removeFromSuperview];
}
}
return cell;
}
Relevant info here:
1) ClosestRenter is NOT nil... it exists. So the else clause should never be executed... and that is the case.
2) Within the code:
[self setupCellsWithClosestRenterCell:cell atIndexPath:indexPath];
There is a simple:
if (indexPath.section == 0)
{
cell.textLabel.text = @"PLACE HOLDER";
}
else
{
// Populate the cell with data. (creates a view (with controller etc) and loads it into the cell)
}
3) There are 2 sections at all times.
The problem is that section 0 (the first section) should have nothing more than that placeholder string. Section 1 should contain my custom subviews (in cells, which it does).
Section 0 initially has just the placeholder string, however once I scroll down (and the section is no longer visible) and scroll back up (quickly) it sometimes has a seemingly random cell from section 1 in there... what the heck? How? I'm reluctant to blame cell reuse but at this point outside of something really silly I don't know what it is.
The disturbing part here is that the cell in section 0 (there is only 1 row there) has no subviews. But when I scroll up and down fast it gets one (from section 1 apparently) and then I get the "WHAT THE HECK" log messages...
It should be worth mentioning that with the for loop (the one with the what the heck messages) does solve the problem (as it removes the unwanted subviews) but there has to be a better way. It feels wrong right now.
Any ideas?
(Feel free to mark this as a duplicate, but I'm fairly certain there is something else going on here).
Thanks.