В cellForRowAtIndexPath:
вам нужно присвоить ячейке с объявлением другой идентификатор ячейки, когда вы удаляете старые ячейки из очереди для повторного использования. Ячейки с разным содержимым подпредставления должны иметь разные идентификаторы, в противном случае он будет просто выталкиваться из ячейки, содержащей adView, всякий раз, когда он удаляет ячейки из стека для идентификатора Cell
.
По сути, когда рекламная ячейка перемещается за пределы экрана, она помещается в очередь повторного использования, а затем отбрасывается и повторно используется для нормальной ячейки, когда обычная ячейка на противоположном конце представления таблицы появляется из-за экрана.
Когда indexPath.row == 0
(для каждого раздела), вам нужно удалить рекламную ячейку из очереди вместо обычной, например:
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *cellId = "Cell";
if(indexPath.row == 0) //first cell in each section
cellId = @"ad";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
if(indexPath.row == 0)
[cell addSubview:bannerView_];
}
if (indexPath.row != 0){
cell.textLabel.text = @"Test";
cell.detailTextLabel.text = @"Test";
cell.imageView.image = nil;
}
return cell;
}
Кроме того, ознакомьтесь с библиотекой с открытым исходным кодом , которую я написал для управления рекламными объявлениями iAds и (запасными) AdMob с помощью одной строки кода. Я не тестировал его с этой конкретной конфигурацией, но, тем не менее, он может помочь.