Есть досадная ошибка, которую я не могу исправить.UITableViewCell - как сбросить содержимое перед повторным использованием
У меня есть CustomCell
, и в нем у меня есть subview, который меняет цвет по значению объекта.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"CustomCell";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
if (cell == nil) {
cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
MyObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath];
if ([object.redColor isEqualToNumber:[NSNumber numberWithBool:YES]]) {
cell.colorView.backgroundColor = [UIColor redColor];
}
else {
cell.colorView.backgroundColor = [UIColor clearColor];
}
return cell;
}
Это все работает нормально, за исключением того, когда я удалить строку с redColor = YES
из Tableview, и я перечисляю, чтобы показать те строки, которые не было видно. Первая строка, которая становится видимой (первая строка, которая повторно использует повторно используемую ячейку), имеет красный цвет, хотя эта строка - redColor = NO
. И если я снова прокручу и скрою ячейку, а затем снова ее покажу, цвет будет установлен на clearColor, как и должно быть.
Я думаю, это потому, что он повторно использует только что удаленную ячейку. Итак, я пытаюсь сбросить содержимое ячейки до повторного использования. В CustomCell.m
- (void)prepareForReuse {
[super prepareForReuse];
self.clearsContextBeforeDrawing = YES;
self.contentView.clearsContextBeforeDrawing = YES;
self.colorView.backgroundColor = [UIColor clearColor];
}
Но это не работает. Apple, Док говорит делегат
табличного представления в Tableview: cellForRowAtIndexPath: всегда должен сбросить все содержимое при повторном использовании ячейки.
Каков правильный способ сброса содержимого? Нужно ли мне удалять subviews из супервизора?
Заранее спасибо
Hello @SFF проверить мой ответ. ,,, –