Вы должны избегать манипулирования ячейкой при каждой загрузке, вместо этого вы должны настроить пользовательский интерфейс при инициализации / создании ячейки.
Чтобы проиллюстрировать это, каждый раз, когда вы прокручиваете новую ячейку (или несколько), можно загрузить с помощью метода cellForRowAtIndexPath:
, в настоящее время вы делаете много изменений вида в этом методе, но могут быть случаи, когда это не нужно (например, новая ячейка того же типа, что и ячейка, которую только что прокрутили за пределы экрана). Переместите эту модификацию пользовательского интерфейса туда, где инициализируется ячейка, а не туда, где меняются данные. Вы можете сделать это с помощью подкласса или просто так.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Reuse id
static NSString *identifier1 = @"identifer-1";
static NSString *identifier2 = @"identifier-2";
static NSString *regular = @"regular";
UITableViewCell *cell;
if (comment.isReply == NO) {
cell = [tableView dequeueReusableCellWithIdentifier: identifier1];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: identifier1] autorelease];
// Do the UI modification here
}
} else if (comment.isReply == YES) {
cell = [tableView dequeueReusableCellWithIdentifier: identifier2];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: identifier2] autorelease];
// Do the UI modification here
}
} else {
// Regular cell
cell = [tableView dequeueReusableCellWithIdentifier: regular];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: regular] autorelease];
}
}
// Load the data into the cell
return cell;
}
Надеюсь, вы поймете, что я делаю с этим, ключ в том, чтобы делать тяжелые вещи как можно меньше и позволить кешированию UITableView иметь больший эффект.