iOS UITableViewCells filas recicladas y la etiqueta no funciona
Me gustaría buscar ayuda en la configuración de etiquetas para botones en las celdas. Esta es una pregunta con un enlace al anterior que publiqué:iOS usando NSDictionary para cargar datos en secciones y filas
Sin embargo, aunque ahora podría pasar datos dinámicamente, mi botón de renovación en cada una de las filas no parece obtener los datos y solo detectaría el mismo título de libro de cada sección cuando se selecciona cualquiera de las filas de la sección.
Según lo que he leído hasta ahora, es porque el botón se está reciclando, por lo tanto, no se puede detectar qué libro se está seleccionando correctamente. He intentado establecer la etiqueta:
cell.renewButton.tag = indexPath.row;
Cómo se ve mi código ahora:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UserCustomCell *cell = (UserCustomCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell.bookTitle.frame = CGRectMake(12, 0, 550, 40);
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"UserCustomCell" owner:self options:nil];
cell = userCustomCell;
self.userCustomCell = nil;
cell.renewButton.tag = indexPath.row;
}
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
cell.bookTitle.frame = CGRectMake(12, 0, 550, 40);
cell.renewButton.frame = CGRectMake(600, 14, 68, 24);
}
[cell.renewButton useBlackActionSheetStyle];
// ########## EDITAR COMIENZA AQUÍ dataSource = [[NSMutableDictionary alloc] init]; // Esto tendría que ser un ivar
for (NSDictionary *rawItem in myArray) {
NSString *date = [rawItem objectForKey:@"date"]; // Store in the dictionary using the data as the key
NSMutableArray *section = [dataSource objectForKey:date]; // Grab the section that corresponds to the date
if (!section) { // If there is no section then create one and add it to the dataSource
section = [[NSMutableArray alloc] init];
[dataSource setObject:section forKey:date];
}
[section addObject:rawItem]; // add your object
}
self.dataSource = dataSource;
//NSLog(@"Data Source Dictionary: %@", dataSource);
NSArray *sections =[[dataSource allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
NSString *sectionTitle = [sections objectAtIndex:indexPath.section];
NSArray *items = [dataSource objectForKey:sectionTitle];
NSDictionary *dict = [items objectAtIndex:indexPath.row];
cell.bookTitle.text = [dict objectForKey:@"name"];
cell.detail.text = [NSString stringWithFormat:@"Due Date: %@ Due Time: %@",
[dict objectForKey:@"date"], [dict objectForKey:@"time"]];
cell.renewButton.tag = indexPath.row;
return cell;
}
pero no funciona en absoluto. Estaría muy agradecido por cualquier sugerencia :) ¡Gracias!
P.S: Mi copia de xcode no se actualiza, solo hasta la versión 4. Vio a algunas personas mencionar el almacenamiento del estado de la etiqueta en DataModel pero solo está disponible en las versiones más recientes. :)