显示横幅广告Objective-C时出现问题

时间:2018-12-03 06:16:08

标签: ios objective-c iphone admob tableview

在第1行和第5行显示横幅广告时出现问题。在显示数据时,第一行替换为横幅广告,每第五行数据替换为横幅广告...如何克服这一点。以下是我尝试过的方法。TIA

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSInteger n;
    n= [array count];
    return n;
}

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row % 5 == 0) {
        //configure ad cell

        for(UIView* view in cell.contentView.subviews) {
            if([view isKindOfClass:[GADBannerView class]]) {
                [view removeFromSuperview];
            }
        }
else
{
 Title.text=[NSString stringWithFormat:@"%@ ",[dict objectForKey:@"Name"]];
}
return cell;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    if (indexPath.row % 5 == 0)
        return 60;
    else
        return 153;
}

1 个答案:

答案 0 :(得分:1)

您需要增加在numberOfRowsInSection中返回的单元格数量,并考虑在cellForRowAt中添加的行

广告数量将为1 + n / 5(第一行,然后每5行),因此表中的单元格数量将为n + n/5 + 1

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSInteger n;
    n= [array count];
    return n/5 + n + 1;
}

现在,您需要从cellForRowAt返回的某些单元格将是广告,并且在访问数据数组时需要对此进行说明。您需要的索引是行号-之前的广告行数。这是index / 5 +1(第一行,每5行)。

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row % 5 == 0) {
        AdCell *cell = (AdCell *)[tableView dequeueReusableCellWithIdentifier:"Ad" forIndexPath: indexPath];
        ...
        NSLog(@"Showing an ad at row %ld",indexPath.row);
        return cell;
    else
    {
        NSInteger index = indexPath.row - indexPath.row/5 - 1;
        NSDictionary *dict = myArray[index];
        NormalCell *cell = (NormalCell *)[tableView dequeueReusableCellWithIdentifier:"Normal" forIndexPath: indexPath];
        cell.title.text=[NSString stringWithFormat:@"%@ ",dict["Name"]];
        NSLog(@"Showing a normal row at row %ld (data from element %ld of array)",indexPath.row,index);
        return cell;
   }
}