UITableView GADBannerView

时间:2011-09-09 22:31:42

标签: ios uitableview admob

我正在关注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 个答案:

答案 0 :(得分:4)

cellForRowAtIndexPath:中,当您将旧单元格出列以便重复使用时,您需要为广告单元格提供不同的单元格标识符。具有不同子视图内容的单元格需要具有不同的标识符,否则只要从堆栈中为Cell标识符出列单元格,它就会弹出包含adView的单元格。

基本上,当广告单元格在屏幕外移动时,它会被放入重用队列中,然后当表格视图另一端的普通单元格从屏幕外进入视图时,它会被弹出并重新用于正常单元格。

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;
}

另外,请查看我写的open-source library,用一行代码管理iAd和(后备)AdMob广告。我没有用这个特定的配置测试它,但它可能会有所帮助。