ios: incrustación de anuncios en una vista uitable cada "x" células
He intentado incrustar anuncios de Google en una vista adecuada de las celdas "X", he seguido este tutorial: (http://googleadsdeveloper.blogspot.com/2012/03/embedding-google-admob-ads-within.html), pero descubro que la vista de tabla no siempre muestra todos los datos en la fuente de datos cuando agrego celdas para los anuncios, por lo general se apaga por unas pocas celdas. Creo que esto tiene que ver con la función numberOfRowsInInSection, pero por mi vida no puedo entender las matemáticaspara calcular esta corrección. Hasta ahora tengo lo siguiente: (kAdCellFrequency actualmente es 10, pero debería poder ajustarse a un valor arbitrario):
-(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;
}
Agregué la variable adicionalCellCount porque cuando usaba el valor 10 para kAdCellFrequency, los datos estaban a 3 celdas de ser correctos, pero esta misma matemática no muestra la cantidad correcta si kAdCellFrequency se establece en 5.
La creación de las celdas celda de anuncio o celda de evento estándar:
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;
}
La visualización del contenidoen el índice de la celda, eliminé la configuración real de los datos, solo necesito el cálculo:
-(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]);
}
Cualquier ayuda sería genial, incluso un puntero a algún lugar donde pueda aprender más sobre estas matemáticas.
Actualizar: De acuerdo, parece que el recuento de celdas regresa correctamente, pero en algunas ocasiones el código configura la duplicación del contenido de algunas celdas, por lo que, por ejemplo, las celdas 320 + 321 muestran el mismo evento. Creo que esto está relacionado con las siguientes matemáticas en mi código original (esto es pseudocódigo):
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
Observe que los valores de ambas celdas son iguales a 288, lo que significa que ahora dos celdas muestran el mismo contenido. Entonces, la cantidad de celdas es correcta, pero el contenido presentado para el índice es incorrecto. (PaulW: este problema también ocurre cuando convertí su código, ¿está recibiendo esto? Estoy llegando al máximo de 325 celdas)
------------Respuesta------------
Enseñándote a pescar...
- Observe cómo se administra realmente el redondeo (consulte lrintf(), por ejemplo).archivo y ejecute algunas salidas de muestra de un rango de números usando un ciclo for/.
- ¿Por qué no enviar el valor del índice calculado a una etiqueta en la celda para que pueda visualizar el problema más claramente?
- Busca formas rápidas de visualizar las matemáticas; incluso una hoja de cálculo puede ayudar.
Etiquetas: objective-c uitableview ios gadbannerview
Artículos relacionados:
Código de nota: 1973 No se puede crear usuario, usuario, @, localhost,; ya existe, mysql
Spring: buen uso de entidades administradas/proxies con ORM
- javascript - Controlador --- Fábrica: pasar parámetros
- python: ¿por qué falla esta consulta muy básica en este modelo de Django?
- canvas - JavaFx crea HatchStyles (algo así como C# .Net)
- mysql - Matriz en bucle PHP de error lógico
- graylog2 - Graylog ; Cómo limitar la aplicación de extractores a un subconjunto de fuentes
- smtp: cómo evitar ser identificado como spam cuando se usa smtplib en python
- android - Mapa de Google toque en el cuadro de diálogo de la hoja inferior
- java - Android: la verificación de permisos no funciona
- ios - UIProgressView rondas de valores de progreso
- subprocesamiento múltiple: cola de espera de python y socket en un solo subproceso
- api - Dividir cadena PHP en matriz
- r - Cambiar el nombre de la columna con dplyr con programación funcional
- Java - ¿Agregar métodos o no agregar métodos a la interfaz?
- java - struts.action.excludePattern no funciona
- json - ¿Cómo detengo el método read_json de Pandas Dataframe para convertir mi época en una cadena legible por humanos?
Artículos calientes
- medicina china para la bronquitis
- Diferencia entre infección de las vías respiratorias superiores y bronquitis
- ¿Qué causa la epididimitis?
- Criterios diagnósticos de cálculos renales
- ¿Qué medicamento la masturbación causa prostatitis?
- ¿Cuáles son los factores de padecer gota?
- Qué comer durante la convalecencia de una hemorragia cerebral
- que es el alzheimer
- Principales criterios diagnósticos de las bronquiectasias
- ¿Cuáles son las formas de prevenir y tratar la menstruación irregular en las mujeres?
- Síntomas de gota de ternera
- Saco gestacional de 5x4mm cuanto dura el embarazo
- La diferencia entre espinillas y espinillas de ácaros
- Por qué frotar con jengibre puede tratar la caída del cabello
- ¿Cuánto tiempo se puede vivir con insuficiencia hepática?