2011-01-29 13 views
41

En tableView:cellForRowAtIndexPath: Tengo el siguiente:En UITableView, cell.detailTextLabel.text no funciona ... ¿por qué?

cell.textLabel.text = @"label"; 
cell.detailTextLabel.text = @"detail"; 

Los textLabel muestra como se esperaba, pero el detailTextLabel no aparece en absoluto, aunque no hay un diagnóstico. Lo que esperaba era que el texto de "detalle" apareciera en la celda en una segunda línea, debajo del texto "normal", posiblemente con un tamaño de letra más pequeño.

Se hace la misma pregunta en otra publicación aquí y el usuario "jbrennan" respondió que el estilo de celda de la tabla debe ser distinto de UITableViewCellStylePlain. Sin embargo, parece que solo hay dos estilos posibles, UITableViewCellStylePlain y UITableViewCellStyleGrouped. Obtengo el mismo resultado con cualquiera (la etiqueta de detalles no aparece).

¿Hay algún otro estilo de celda que no aparezca en la documentación? ¿Ha cambiado UITableView en la última actualización y detailTextLabel ya no está disponible? ¿Tengo que hacer algo extra para que aparezca? ¿Alguna sugerencia?

Estoy usando xcode 3.2.5 y compilando para el simulador de iPhone 4.2.

Respuesta

111

su inicialización necesita ser cambiado a esto:

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellIdentifier] autorelease];

He subrayado y en negrita la parte que tiene que cambiar.

+0

¡Derecho! Gracias. Intenté cambiar el estilo a Subtítulo, pero cambié UITableViewStyle en lugar de UITableViewCellStyle y no compilé, así que pensé que el estilo Subtitle ya no estaba disponible. – RobertL

+1

¡Jaja! Todos cometemos errores tontos cuando codificamos. Creo que si Apple deshabilitara el estilo de los subtítulos, habría disturbios. –

+3

Esto parece que va a inicializar una nueva UITableViewCell cada vez, en lugar de eliminar de la pila para preservar la memoria. Parece que la única forma de reutilizar las celdas del estilo UITableViewCellStyleSubtitle sería crear una subclase, anular el inicializador y llamar al '' tableView dequeueReusableCellWithIdentifier: @ "ReuseIdentifier"]; '¿Alguien puede confirmar o negar esto? Consulte la discusión sobre 'initWithStyle: reuseIdentifier:' https://developer.apple.com/library/ios/documentation/Uikit/reference/UITableViewCell_Class/index.html#//apple_ref/occ/instm/UITableViewCell/initWithStyle:reuseIdentifier: –

14

Debe establecer el tipo de celda en Subtítulo cuando lo asigne.

if (!cell) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:BasicCellIdentifier]; 
} 
+0

¡Derecha! Gracias. Ver mi comentario a la respuesta anterior. – RobertL

12

Al usar Xcode 4.2, establezca el estilo de celda de vista de tabla en Subtítulo en Storyboard. dequeueReusableCellWithIdentifier devolverá una celda instanciada.

3
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
          reuseIdentifier:CellIdentifier]; 
4

Poner la mesa Estilo Ver celda subtitular en Storyboard

y escribir el código para configurar que CELULAR

if (cell == nil) { 
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:BasicCellIdentifier] autorelease]; 
} 

enter image description here

0

Swift 3:

Si tu eres m aking su celda con anulando la función "cellForRowAt indexPath":

let tableContent = ["1", "2", "3", "4", "5"] 
let tableDetailContent = ["a", "b", "c", "d", ""] 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: "yourCellIdentifier") 
    cell.textLabel?.text = tableContent[indexPath.row] 
    cell.detailTextLabel?.text = tableDetailContent[indexPath.row] 

    return cell 
} 

enter image description here

Esta parte de código de arriba le permite establecer su detailTextLabel .. Puede establecer lo que quiera en guión gráfico de vista de tabla Estilo de celda (Personalizado, Básico, Detalle a la derecha, Detalle a la izquierda, Subtítulo), esta línea lo anulará:

style: UITableViewCellStyle.subtitle 
Cuestiones relacionadas