que tienen un NSDictionary
que vamos a decir es la siguiente:UITableViewCells diferentes en un TableView
key: value:
name Bookshelf
movies Array containing: (Movie 1, Movie 2, Movie 3)
books Array containing: (Book 1, Book 2, Book 3)
music Array containing: (Music 1, Music 2, Music 3)
Y así sucesivamente. Ahora lo que intento hacer es crear un TableView que muestre toda esta información, pero con diferentes tipos de celdas en función de la clave del diccionario. Por ejemplo, las películas usan cellForMovies
libros usan cellForBooks
música usan cellForMusic
, cada uno tiene su propio diseño.
Obviamente, estoy simplificando demasiado, pero espero que entiendas lo que estoy tratando de hacer.
Soy capaz de lograr esto si hago secciones y un tipo de celda diferente para cada sección, pero no quiero hacer eso. Quiero ser capaz de tener una tabla de este modo, por ejemplo:
cellForBooks
cellForMovies
cellForMovies
cellForMusic
cellForBooks
y así sucesivamente ... Cualquier idea o recursos que me puede apuntar a? Solo me importa el soporte de iOS 5 (guiones gráficos).
Editar con solución:
Un gran agradecimiento a todos los que ayudaron, especialmente Atticus que puso la última pieza juntos.
Lo que terminó funcionando fue cambiar la estructura de los datos para ser una matriz de diccionarios y luego agregar un Key: type Value: book/movie/music
a cada entrada. La estructura de datos ahora queda como:
Array[0]: Dictionary: [Key: type Value: book], [Key: name Value: Physics];
Array[1]: Dictionary: [Key: type Value: music], [Key: name Value: Rock];
continuación para configurar las células que hice esto:
NSString *CellIdentifier = @"Cell";
NSDictionary *object = [self.listOfStuff objectAtIndex:indexPath.row];
if ([[object objectForKey:@"type"] isEqualToString:@"book"]){
CellIdentifier = @"BookCell";
}else if ([[object objectForKey:@"type"] isEqualToString:@"music"]){
CellIdentifier = @"MusicCell";
}else if ([[object objectForKey:@"type"] isEqualToString:@"movie"]){
CellIdentifier = @"MovieCell";
}
cada uno de ellos tenía un tableviewcell diferente en el guión gráfico. Nos dimos cuenta de que si quieres usar cualquiera de las funciones celulares incorporados, como cell.textLabel.text
que tenía que hacer esto:
cell.textLabel.text = [object objectForKey:@"name"];
cell.textLabel.backgroundColor = [UIColor clearColor];
cell.textLabel.opaque = NO;
Espero que esto ayude a alguien más en el futuro.
¿Hay un guión gráfico en alguna parte? No veo uno en el repositorio. – atticus
Se localizó por alguna razón. Está en el directorio en.lprog. –
Lo tengo. Todo está bien, excepto que está usando la propiedad incorporada textLabel en la celda personalizada. Cuando lo configura, la celda lo oculta y el color de fondo de la etiqueta es blanco sólido. Cuando selecciona la celda, borra temporalmente el fondo y puede ver los elementos detrás de ella. Si desea utilizar la etiqueta de texto incorporada que está bien, simplemente configure el color de fondo para borrar: \t 'cell.textLabel.backgroundColor = [UIColor clearColor]; cell.textLabel.opaque = NO; ' – atticus