在每个“x”单元格中嵌入广告
Posted
技术标签:
【中文标题】在每个“x”单元格中嵌入广告【英文标题】:Embedding adverts in a uitableview every "x" cells 【发布时间】:2016-06-14 11:47:30 【问题描述】:我一直在尝试将谷歌广告嵌入到“X”单元格的合适视图中,我遵循了本教程:
(http://googleadsdeveloper.blogspot.com/2012/03/embedding-google-admob-ads-within.html),但我发现当我为广告添加单元格时,表格视图并不总是显示数据源中的所有数据,它通常会关闭几个单元格。我相信这与numberOfRowsInInSection
函数有关,但对于我的一生来说,我无法通过数学来计算这个正确性。到目前为止,我有以下内容:(kAdCellFrequency 当前为 10,但这应该可以调整为任意值):
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
id<NSFetchedResultsSectionInfo> sectionInfo = [[eventResults sections] objectAtIndex:0];
int sectionObjectsCount = [sectionInfo numberOfObjects];
int advertCellCount = ([sectionInfo numberOfObjects])/kAdCellFrequency;
int additionalCellCount = sectionObjectsCount%kAdCellFrequency;
NSLog(@"event count %i Ad cell count %i additional count %i total cell count %i cells",sectionObjectsCount, advertCellCount, additionalCellCount, sectionObjectsCount+advertCellCount+additionalCellCount);
SDMEvent *theEvent = [[eventResults fetchedObjects]objectAtIndex:sectionObjectsCount-1];
NSLog(@"Final object name %@",theEvent.eventName);
return sectionObjectsCount+advertCellCount+additionalCellCount;
//return sectionObjectsCount;
我添加了 additionalCellCount 变量,因为当 kAdCellFrequency 使用值 10 时,数据与正确的数据相差 3 个单元格,但如果 kAdCellFrequency 设置为 5,同样的数学运算无法显示正确的数量。
单元格广告单元格或标准事件单元格的创建:
adCell = (UICellWithAdvert *) [tableView dequeueReusableCellWithIdentifier:@"UICellWithAdvert"];
eventCell = (UISDMEventCell *) [tableView dequeueReusableCellWithIdentifier:@"UISDMEventCell"];
NSLog(@"index: %i cell freq: %i result: %i",[indexPath row], kAdCellFrequency, [indexPath row]%kAdCellFrequency);
if (([indexPath row] % kAdCellFrequency) == kAdCellFrequency-1) // Advert cell dont add cell at index 0!
if (!adCell)
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"UICellWithAdvert" owner:nil options:nil];
for(id currentObject in topLevelObjects)
if ([currentObject isKindOfClass:[UICellWithAdvert class]])
adCell = (UICellWithAdvert *)currentObject;
// remove the advert from its current cell
[googleAdvert removeFromSuperview];
// add to cell if it doesn't have advert
if (!googleAdvert.superview)
[adCell addSubview:googleAdvert];
NSLog(@"Add cell with Advert");
return adCell;
else // event cell
if (!eventCell)
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"UISDMEventCell" owner:nil options:nil];
for(id currentObject in topLevelObjects)
if ([currentObject isKindOfClass:[UISDMEventCell class]])
eventCell = (UISDMEventCell *)currentObject;
return eventCell;
单元格索引处内容的显示,我取出了实际设置的数据,只需要计算:
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
int calculatedIndex = [indexPath row]-floor((float)[indexPath row]/kAdCellFrequency);
NSLog(@"Calculated %i",calculatedIndex);
NSLog(@"Normal Index %i",[indexPath row]);
任何帮助都会很棒,甚至是指向我可以了解更多关于这个数学的地方的指针?
更新: 好的,单元格计数似乎正确返回,但在某些情况下,代码设置复制某些单元格的内容,例如单元格 320 + 321 显示相同的事件。我认为这与我原始代码中的以下数学有关(这是伪代码):
adCellFrequency = 10
cellIndex = 319
int calculatedIndex = [indexPath row]-floor((float)[indexPath row]/kAdCellFrequency); // equals 288
cellIndex = 320
int calculatedIndex = [indexPath row]-floor((float)[indexPath row]/kAdCellFrequency); // equals 288
注意两个单元格的值都等于 288,这意味着两个单元格现在显示相同的内容。所以单元格的数量是正确的,但为索引呈现的内容是不正确的。 (PaulW - 当我转换你的代码时也会出现这个问题,你得到这个了吗..我在 325 个单元格中达到最大值)
【问题讨论】:
这是一个有趣的问题,所以我看了一下。我不想提供只是代码转储的答案,所以这里有一个代码转储的要点:) gist.github.com/paulw11/3dc18c3844df100863033f41890e532c 抱歉,我刚刚意识到您使用的是 Objective C,我用 Swift 编写了我的解决方案。希望您可以查看最后三个功能;他们执行数学运算,应该很容易转换为 Objective C 嗨,保罗,感谢您提供如此详细的答案,我将您的代码转换为目标 c,但我遇到了同样的问题,但您的代码似乎帮助我缩小了问题的范围。似乎数学倾向于为多个单元格返回相同的值,因此单元格计数是正确的,但为单元格设置的项目不正确,我相信这正是我的代码所发生的事情。我在问题的主要部分添加了一个示例,说明我在说什么,有什么想法吗? 嗯。我的测试只显示了行号,并没有跳过任何行号。 我刚刚在 gist 中添加了一个目标 C 文件,该文件具有您应该使用的功能来代替您获得calculatedIndex
的代码
【参考方案1】:
教你如何钓鱼……
-
查看您的舍入实际上是如何管理的(例如查看 lrintf() 并使用 for/loop 运行一些数字范围的示例输出。
为什么不将计算出的Index 值输出到单元格上的标签中,以便更清楚地看到问题?
查看快速可视化数学的方法 - 甚至电子表格也可以提供帮助。
【讨论】:
嗨多米尼克,我实际上以与您描述的类似的方式处理了这个问题,绘制单元格并标记索引,然后是假定的索引。实际上并不是计算的索引,而是返回的单元格计数似乎是问题所在。这就是问题所在,并且基于任意值来可视化某些东西有点困难。 所以你已经完成了一个值的电子表格,例如 index = 9, cell = 9;索引 = 10,单元格 = 广告 1; index = 11, cell = 10 - 在哪里可以根据索引计算单元格? 不是电子表格,但数学本身是可靠的,我有一个表格视图的绘图,其中每个索引的公式和值是根据添加的广告单元格计算出来的......但是我的内容可以进入数百个,所以我无法得出这个值,以上是关于在每个“x”单元格中嵌入广告的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Shiny 的 rhandsontable 单元格中嵌入模态