Этот метод вызывается один раз для каждой ячейки, которую необходимо заполнить.Если вы прокрутите таблицу, строки исчезнут с экрана и будут поставлены в очередь с их идентификатором повторного использования.Когда строки прокручиваются в таблицу, этот метод вызывается для заполнения ячеек, когда они становятся видимыми.
Итак, сначала вы хотите удалить одну ячейку из очереди каждый раз, когда вызывается этот метод.Отменяя ячейки типа UITableViewCell' and
UITableViewCellB ', вы удаляете ячейку, которая не будет использоваться.Таким образом, вам нужно определить, какой тип ячейки вам нужен, прежде чем снимать ее с очереди, а затем снять ее с нужного типа (по идентификатору повторного использования).
Во-вторых, цель механизма очередей ячеек состоит в том, чтобы вы не делали этого.приходится делать такие вещи, как настраивать внешний вид ячейки каждый раз, когда она появляется в представлении.Если ячейка с таким типом появления уже находится в очереди, она должна выйти из уже настроенной очереди, и вам нужно только поместить в нее данные.Это сделано для производительности (скорости), но это может не иметь большого значения в вашем случае.
Возможно, я ошибаюсь, и я исправлю свой ответ, если это так, но сообщение об ошибке может быть связано с тем, что число разделов, возвращаемых numberOfSections
, и / или число или строки, возвращаемые numberOfRowsInSection:
неверно и не соответствует источнику данных.Он пытается получить доступ к элементу источника данных, который не существует.
Какой источник данных вы используете, и можете ли вы показать код для numberOfSections
и numberOfRowsInSection:
?
ОБНОВЛЕНИЕ с исправлением
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@"UITableViewCell"];
UIView *cellBackView; // move this outside of the switch block
switch (indexPath.section) {
case 0:
[[cell textLabel] setText:title];
[[cell textLabel] setTextColor:[UIColor whiteColor]];
[[cell detailTextLabel] setText:[NSString stringWithFormat:@"Entry: £%@",price]];
[[cell detailTextLabel] setTextColor:[UIColor colorWithWhite:1.0 alpha:.8]];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
break;
case 1:
cellBackView = [[UIView alloc] initWithFrame:CGRectZero];
cellBackView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"PhotoFrame.png"]];
cell.backgroundView = cellBackView;
[lImage setFrame:CGRectMake(0, 23, 320, 200)];
[cell.contentView addSubview:lImage];
break;
case 2:
cellBackView = [[UIView alloc] initWithFrame:CGRectZero];
cellBackView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"PaperTop.png"]];
cell.backgroundView = cellBackView;
break;
case 3:
cellBackView = [[UIView alloc] initWithFrame:CGRectZero];
cellBackView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"Paper.png"]];
cell.backgroundView = cellBackView;
break;
case 4:
cellBackView = [[UIView alloc] initWithFrame:CGRectZero];
cellBackView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"PaperBottom.png"]];
cell.backgroundView = cellBackView;
break;
default:
break;
}
return cell;
}