Путаница с повторно используемыми ячейками (неправильные ячейки, затронутые после прокрутки)

Я уверен, что этот вопрос не уникален, но я не нашел других источников для его решения. Фактически, это вызывает больше путаницы. Пожалуйста, проливайте свет, если сможете.

Суть проблемы в том, что я хочу сместить (-50) UILabel в ячейке ONE таблицы из 7 разделов 30ish с пользовательскими ячейками. После прокрутки еще несколько строк перемещают эту метку, и они продолжают двигаться все дальше и дальше по мере прокрутки.

Вы заметите, что минус 50 x координата находится в 2-х местах для тестирования. Первый, в ячейке == nil, никогда не вызывается. Зачем?? Я думал, что это место для решения этой проблемы.

Также не уверен, как вызвать initWithStyle (не для пользовательских) или initWithCoder (созданный в раскадровке), даже если ячейка была нулевой. ??

NSArray *a = [[userDetailData objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]]; NSString *key = [[[a objectAtIndex:0] allKeys] objectAtIndex:0]; NSString *value = [[a objectAtIndex:0] valueForKey:key]; static NSString *CellIdentifier = @"MasterCell"; UsersTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; // If cell does not exist, create it, otherwise customize existing cell for this row if (cell == nil) { // Create cell cell = [[UsersTableViewCell alloc] initWithCoder:<#(NSCoder *)#>reuseIdentifier:CellIdentifier]; // Configure cell: NSLog(@"Key: %@ %d, %d", key, [indexPath section], [indexPath row]); // Prepare the date field to move left for checkmark or ex-mark if ([key isEqualToString:@"Date"]) { CGRect frame = cell.comboLabel.frame; frame.origin.x -= 50; cell.comboLabel.frame = frame; NSLog(@"In Date... minus 50"); } } // Customize cell: CGRect frame = cell.comboLabel.frame; if ([key isEqualToString:@"Date"]) { frame.origin.x -= 50; cell.comboLabel.frame = frame; NSLog(@" %d, %d\n cell: %@\n", [indexPath section], [indexPath row], cell); } else { frame.origin.x += 0; cell.comboLabel.frame = frame; } // Reset color cell.comboLabel.textColor = [UIColor blackColor]; // Set the Item cell.nameLabel.text = [NSString stringWithFormat: @" %@",key]; // Give the cell an accessory indicator ..... continue on with logic. 

ячейка не равна нулю, потому что вы просто назначили ее повторно используемой ячейке прямо перед оператором if.

Я бы подумал о создании вторичной ячейки прототипа с идентификатором типа «Ячейка даты» и сделать второй набор повторно используемых ячеек, если создаваемая ячейка имеет ключ «Дата»,

Вот:

 NSArray *a = [[userDetailData objectAtIndex:[indexPath section]] objectAtIndex:[indexPath row]]; NSString *key = [[[a objectAtIndex:0] allKeys] objectAtIndex:0]; NSString *value = [[a objectAtIndex:0] valueForKey:key]; static NSString *CellIdentifier = @"MasterCell"; static NSString *DateCellIdentifier = @"Date Cell"; UsersTableViewCell *cell; //Customize Cell if ([key isEqualToString:@"Date"]) { cell = [tableView dequeueReusableCellWithIdentifier:DateCellIdentifier]; CGRect frame = cell.comboLabel.frame; frame.origin.x -= 50; cell.comboLabel.frame = frame; NSLog(@" %d, %d\n cell: %@\n", [indexPath section], [indexPath row], cell); } else { cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; frame.origin.x += 0; cell.comboLabel.frame = frame; } // Reset color cell.comboLabel.textColor = [UIColor blackColor]; // Set the Item cell.nameLabel.text = [NSString stringWithFormat: @" %@",key]; // Give the cell an accessory indicator ..... continue on with logic. 

На самом деле вам, вероятно, даже не придется выполнять большую часть настройки ячейки, если вы просто настроите свою ячейку прототипа на раскадровке.

  • Показать UITableViewController как всплывающее окно, Show Detail также в всплывающем окне
  • UITableView без записей
  • Обеспечение регулировки высоты ячейки на пользовательский UITableViewCell?
  • UITableview ячейка Перекрытие на каждом с arm64
  • Добавить кнопку обновления в панель навигации
  • iOS UITableViewCell не отображается правильно, кроме индикатора раскрытия
  • Помещение градиента на фоне ячеек таблицы
  • UILabel не обновляет свою высоту после установки текста (в большинстве случаев) в ios
  • Идите прямо в другой детский дневник?
  • iOS 5 Пользовательская панель вкладок освобождает таблицу?
  • Swift (некоторые) Методы UITableViewDelegate не выполняются
  • Давайте будем гением компьютера.