zamiar zacząć od stwierdzenia, widziałem te pytania:iOS: Komórki cellForRowAtIndexPath są coraz pomieszane
iOS: UITableView mixes up data when scrolling too fast
(custom) UITableViewCell's mixing up after scrolling
Items mixed up after scrolling in UITableView
Pierwszy i ostatni wydaje się bardzo istotne na mój problem, jednak jestem dość pewny, że mam logikę dla każdej sekcji, aby ustalić, co powinno pojawić się w komórce (dane), a mimo to wciąż się mieszają.
Poniżej znajduje się odpowiedni kod:
- (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;
}
Stosowna informacji tutaj:
1) ClosestRenter NIE jest zerowa ... istnieje. Tak więc klauzula else nie powinna nigdy zostać wykonana ... i tak właśnie jest.
2) w kodzie:
[self setupCellsWithClosestRenterCell:cell atIndexPath:indexPath];
Jest to prosta
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) są 2 sekcje w każdym momencie.
Problem polega na tym, że sekcja 0 (pierwsza sekcja) nie powinna mieć nic poza łańcuchem zastępczym. Sekcja 1 powinna zawierać moje własne subviews (w komórkach, które robi).
Sekcja 0 początkowo ma tylko ciąg znaków zastępczych, jednak gdy przewińę w dół (i sekcja nie jest już widoczna) i przewijam do góry (szybko), czasami ma ona pozornie losową komórkę z sekcji 1 tam ... co do diabła? W jaki sposób? Niechętnie obwinia się o ponowne użycie komórki, ale w tym momencie poza czymś naprawdę głupim nie wiem, co to jest.
Niepokojąca część tutaj polega na tym, że komórka w sekcji 0 (tam jest tylko jeden rząd) nie ma subviews. Ale kiedy szybko przewijam w górę iw dół, otrzymuję jeden (z sekcji 1 widocznie), a następnie otrzymuję komunikaty dziennika "CO TO THE HECK" ...
Warto wspomnieć, że z pętlą for (tą z to, co komunikaty heck), rozwiązuje problem (ponieważ usuwa niepożądane subviews), ale musi być lepszy sposób. Czuje się źle teraz.
Wszelkie pomysły?
(Możesz oznaczyć to jako duplikat, ale jestem pewien, że dzieje się tu coś jeszcze).
Dzięki.
Dobra robota Jordan! To zaoszczędziło mi wiele frustracji. –
SWEET LAWD BABY JEZUS. +10000. – Kezzer