UITableView GADBannerView - PullRequest
       4

UITableView GADBannerView

1 голос
/ 10 сентября 2011

Я следую учебнику по Google AdMob Ads для iOS , чтобы заставить объявления работать.Все работает хорошо, пока я не попытаюсь добавить рекламу в UITableView.Мой дизайн должен был состоять из двух разделов в таблице, где объявление будет отображаться в первом разделе, а данные таблицы - во втором разделе.Это, однако, не работает слишком хорошо, так как я получаю объявление в первом разделе, НО оно также повторяется в каждой 10-й ячейке.Я хочу объявление только один раз.Как мне это сделать.

Вот мой код ...

- (void)viewDidLoad {
[super viewDidLoad];

UIBarButtonItem *refreshButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refresh:)];
self.navigationItem.rightBarButtonItem = refreshButtonItem;
[refreshButtonItem release];

// Create a view of the standard size at the bottom of the screen.
bannerView_ = [[GADBannerView alloc]
               initWithFrame:CGRectMake(0.0,
                                        0.0,
                                        GAD_SIZE_320x50.width,
                                        GAD_SIZE_320x50.height)];

// Specify the ad's "unit identifier." This is your AdMob Publisher ID.
bannerView_.adUnitID = @"blablabla";

// Let the runtime know which UIViewController to restore after taking
// the user wherever the ad goes and add it to the view hierarchy.
bannerView_.rootViewController = self;
GADRequest *adMobRequest = [GADRequest request];

adMobRequest.testDevices = [NSArray arrayWithObjects:
                            GAD_SIMULATOR_ID,                               // Simulator
                            @"fafasfasdfasdrasdasfasfaasdsd",                                    nil];

// Initiate a generic request to load it with an ad.
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// Return the number of sections.
return 2;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.

if (section == 0) {
    return 1;
} else {
    return 50;
} 
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];  
if (cell == nil) {      
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];        
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

}

if (indexPath.section == 0) {
    if (indexPath.row == 0) {
    [cell addSubview:bannerView_];
    }
} else {
    cell.textLabel.text = @"Test";
    cell.detailTextLabel.text = @"Test";
    cell.imageView.image = nil;  
}      

return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 50;
}

Производит это ..

enter image description here

1 Ответ

4 голосов
/ 03 ноября 2011

В 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 с помощью одной строки кода. Я не тестировал его с этой конкретной конфигурацией, но, тем не менее, он может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...