在第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;
}
答案 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;
}
}