Это обычная проблема, с которой сталкиваются люди при повторном использовании ячеек таблицы.
эта строка пытается повторно использовать ячейку. это означает, что если ячейка 0 переместится за пределы экрана, она будет использоваться как ячейка 5:
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
если ячейка не может быть повторно использована, вы создаете новую:
if (cell == nil){
cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
и на следующей строке ваша проблема, вы настраиваете ячейку, только если ячейка не может быть повторно использована. Что происходит 5 раз (для ячеек, которые видны, когда таблица становится видимой).
Но все ячейки, которые ваша таблица хочет отобразить впоследствии, будут повторно использоваться ячейками, которые уже имеют содержимое.
// Set up the cell
/*...*/
но не волнуйся. это очень легко исправить. Вы должны отделить создание своей ячейки от ее конфигурации. Просто сдвиньте немного кода следующим образом:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyIdentifier";
CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];
if (cell == nil){
cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
}
// whatever happened before. You have a valid cell at this point.
// Set up the cell
int storyIndex = indexPath.row;
//[cell setText:[[stories objectAtIndex: storyIndex] objectForKey: @"title"]];
//Story title
//cell.textLabel.text = [[stories objectAtIndex: storyIndex] objectForKey: @"title"];
//cell.textLabel.font = [UIFont boldSystemFontOfSize:14];
cell.lTitle.text = [[stories objectAtIndex: storyIndex] objectForKey: @"title"];
cell.lSummary.text = [[stories objectAtIndex: storyIndex] objectForKey: @"summary"];
cell.lDate.text = [[stories objectAtIndex: storyIndex] objectForKey: @"date"];
return cell;
}
РЕДАКТИРОВАТЬ: возможно я должен прочитать вопрос в следующий раз. Но, думаю, я все еще на 100% прав.
Если я удаляю tableView: heightForRowAtIndexPath: все в порядке (кроме отсутствия нужного мне размера ячейки)
Я думаю, что это совпадение. Сколько у вас клеток? Я думаю, около 7 или 8? Все хорошо, потому что все ваши клетки видны одновременно. Поэтому нет необходимости повторно использовать ячейку, и все они имеют контент, который должен иметь.