, поэтому // complex stuff
означает добавление UIViews.
Я делаю пример для UIImageView. Поскольку вы не показываете сложные вещи, вы должны принять его самостоятельно.
ваш код выглядит так:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
if ([self.hats count] > 0) {
UIImageView *imageView = [[UIImageView....];
[cell.contentView addSubView:imageView];
[imageView setImage:foo];
[imageView release];
}
return cell;
}
рефакторинг вашего кода, чтобы он выглядел так:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UIImageView *imageView = [[UIImageView....];
[cell.contentView addSubView:imageView];
imageView.tag = 42;
[imageView release];
}
if ([self.hats count] > 0) {
UIImageView *imageView = [cell viewWithTag:42];
[imageView setImage:foo];
}
return cell;
}
et вуаля, ваш просмотр таблицы отзывчив. Потому что вы создаете подпредставления ровно один раз для каждой ячейки. И когда ячейка больше не используется и попадает в корзину для повторного использования, подпредставления остаются с ней.
И если вам нужно 4 изображения в одной ячейке и 8 в другой, вы добавляете 8 изображений при создании ячейки и присваиваете им кадр CGRectZero и, конечно же, разный тег для каждого представления.
Если они вам нужны, вы показываете их, если они вам не нужны, вы устанавливаете изображение на ноль, а рамка на ноль.