Sé que esta pregunta era para iOS 5, pero para beneficio de los futuros lectores, tenga en cuenta que ahora podemos usar iOS 6 en dequeueReusableHeaderFooterViewWithIdentifier
lugar de dequeueReusableCellWithIdentifier
.
Así pues, en viewDidLoad
, llamar a cualquiera registerNib:forHeaderFooterViewReuseIdentifier:
o registerClass:forHeaderFooterViewReuseIdentifier:
. Luego en viewForHeaderInSection
, llame tableView:dequeueReusableHeaderFooterViewWithIdentifier:
. No utiliza un prototipo de celda con esta API (es una vista basada en NIB o una vista creada mediante programación), pero esta es la nueva API para encabezados y pies de página en desuso.
Simplemente use una celda prototipo como encabezado y / o pie de página de su sección.
tableView:viewForHeaderInSection:
método o eltableView:viewForFooterInSection:
método[tableView dequeueReusableCellWithIdentifier:]
para obtener el encabezadotableView:heightForHeaderInSection:
métodoEditar: Cómo cambiar el título del encabezado (pregunta comentada):
tableView:viewForHeaderInSection:
método, obtenga la etiqueta llamando a:fuente
viewForHeaderInSection
método (no es necesario agregar ninguna UIViews personalizada).dequeueReusableHeaderFooterViewWithIdentifier
se presenta, y ahora se prefiere sobre esta respuesta. Pero usar eso correctamente ahora requiere más pasos. Tengo guía @ samwize.com/2015/11/06/… .UITableViewCell
como una vista de encabezado. Te resultará muy difícil depurar fallas visuales: el encabezado a veces desaparecerá debido a la deducción de las celdas y estarás buscando durante horas por qué es así hasta que te des cuenta deUITableViewCell
que no pertenece alUITableView
encabezado.En iOS 6.0 y superior, las cosas han cambiado con la nueva
dequeueReusableHeaderFooterViewWithIdentifier
API.He escrito una guía (probada en iOS 9), que se puede resumir como tal:
UITableViewHeaderFooterView
viewDidLoad
viewForHeaderInSection
y usedequeueReusableHeaderFooterViewWithIdentifier
para recuperar el encabezado / pie de páginafuente
Lo conseguí trabajando en iOS7 usando una celda prototipo en el guión gráfico. Tengo un botón en la vista del encabezado de mi sección personalizada que desencadena una secuencia configurada en el guión gráfico.
Comience con la solución de Tieme
Como señala pedro.m, el problema con esto es que al tocar el encabezado de la sección se selecciona la primera celda de la sección.
Como señala Paul Von, esto se soluciona devolviendo el contentView de la celda en lugar de la celda completa.
Sin embargo, como señala Hons, una presión prolongada en el encabezado de dicha sección bloqueará la aplicación.
La solución es eliminar cualquier gesto Reconocimiento de contentView.
Si no está utilizando gestos en las vistas de encabezado de sección, este pequeño truco parece hacerlo.
fuente
Si usa guiones gráficos, puede usar una celda prototipo en la vista de tabla para diseñar su vista de encabezado. Establezca una identificación única y viewForHeaderInSection puede quitar la celda con esa ID y convertirla en una UIView.
fuente
Si necesita una implementación rápida de esto, siga las instrucciones en la respuesta aceptada y luego en su UITableViewController implemente los siguientes métodos:
fuente
La solución que se me ocurrió es básicamente la misma solución utilizada antes de la introducción de los guiones gráficos.
Cree un nuevo archivo de clase de interfaz vacío. Arrastre una vista UIV al lienzo, con el diseño que desee.
Cargue la punta manualmente, asígnela a la sección de encabezado / pie de página apropiada en los métodos de delegado viewForHeaderInSection o viewForFooterInSection.
Tenía la esperanza de que Apple simplificara este escenario con guiones gráficos y siguiera buscando una solución mejor o más simple. Por ejemplo, los encabezados y pies de página de tabla personalizados son fáciles de agregar.
fuente
tableView:titleForHeaderInSection
, que es una línea.Cuando devuelva el contenido de la celda, tendrá 2 problemas:
viewForHeaderInSection
guardia, crea una nueva celda)Solución:
Clase de contenedor para encabezado de tabla \ pie de página. Es solo un contenedor, heredado de
UITableViewHeaderFooterView
, que contiene la celda dentrohttps://github.com/Magnat12/MGTableViewHeaderWrapperView.git
Registre la clase en su UITableView (por ejemplo, en viewDidLoad)
En su UITableViewDelegate:
fuente
Solía hacer lo siguiente para crear vistas de encabezado / pie de página perezosamente:
[NSNull null]
fuente
He tenido problemas en un escenario en el que Header nunca se reutilizó, incluso haciendo todos los pasos adecuados.
Entonces, como una nota de consejo para todos los que quieran lograr la situación de mostrar secciones vacías (0 filas), tenga en cuenta que:
dequeueReusableHeaderFooterViewWithIdentifier no reutilizará el encabezado hasta que devuelva al menos una fila
Espero eso ayude
fuente
Para seguir la sugerencia de Damon , así es como hice que el encabezado sea seleccionable como una fila normal con un indicador de divulgación.
Agregué un botón subclasificado de UIButton (nombre de subclase "ButtonWithArgument") a la celda prototipo del encabezado y eliminé el texto del título (el texto en negrita "Título" es otro UILabel en la celda prototipo)
luego configure el botón en la vista de encabezado completo y agregue un indicador de divulgación con el truco de Avario
ButtonWithArgument.h
ButtonWithArgument.m
fuente
Debería usar la solución de Tieme como base, pero olvidarse del
viewWithTag:
y otros enfoques sospechosos, en su lugar, intente recargar su encabezado (recargando esa sección).Entonces, después de configurar su vista de encabezado de celda personalizada con todas las
AutoLayout
cosas elegantes , simplemente retírela y devuelva el contentView después de su configuración, como:fuente
¿Qué pasa con una solución donde el encabezado se basa en una matriz de vista:
Siguiente en el delegado:
fuente
Agregar celda
StoryBoard
y establecerreuseidentified
Código
y
Utilizar:
fuente
Similar a la respuesta de laszlo, pero puede reutilizar la misma celda prototipo para las celdas de la tabla y la celda del encabezado de la sección. Agregue las dos primeras funciones a continuación a su subclase UIViewController
fuente
Aquí está la respuesta de @Vitaliy Gozhenko , en Swift.
Para resumir, creará un UITableViewHeaderFooterView que contiene un UITableViewCell. Este UITableViewCell será "invaluable" y puede diseñarlo en su guión gráfico.
Crear una clase UITableViewHeaderFooterView
Conecte su vista de tabla con esta clase en su función viewDidLoad:
Cuando solicite, para un encabezado de sección, elimine un CustomHeaderFooterView e inserte una celda en él
fuente