Quiero personalizar el UITableView
encabezado para cada sección. Hasta ahora, he implementado
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
Este UITabelViewDelegate
método Lo que quiero hacer es obtener el encabezado actual para cada sección y simplemente agregarlo UILabel
como una subvista.
Hasta ahora, no puedo lograr eso. Porque no pude encontrar nada para obtener el encabezado de sección predeterminado. Primera pregunta, ¿hay alguna forma de obtener el encabezado de sección predeterminado ?
Si no es posible, necesito crear una vista de contenedor que es un UIView
pero, esta vez necesito establecer el color de fondo predeterminado, el color de sombra, etc. Porque, si miras detenidamente el encabezado de la sección, ya está personalizado.
¿Cómo puedo obtener estos valores predeterminados para cada encabezado de sección?
Gracias a todos.
fuente
tableView:titleForHeaderInSection:
?NSString
, necesito configurar una fuente personalizada, así que no puedo si usotableView:titleForHeaderInSection:
Respuestas:
Puedes probar esto:
fuente
La respuesta seleccionada usando
tableView :viewForHeaderInSection:
es correcta.Solo para compartir un consejo aquí.
Si está usando storyboard / xib, entonces podría crear otra celda prototipo y usarla para su "celda de sección". El código para configurar el encabezado es similar a cómo se configura para las celdas de fila.
fuente
viewForHeaderInSection
nocanEditRowAtIndexPath
como usted mencionó. Nunca verifico el bloqueo que dijiste, pero ¿podrías aclarar cómo una presión prolongada puede causar un bloqueo?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.UITableViewCell
como encabezado es simplemente incorrecto.La versión rápida de Lochana Tejas responde:
fuente
override
palabra clave es redundante. Además, considere reutilizar las vistas de encabezado en lugar de volver a crearlas.Si usa la vista de encabezado predeterminada, solo puede cambiar el texto con
Para Swift:
Si desea personalizar la vista, debe crear una nueva usted mismo.
fuente
¿Por qué no usar UITableViewHeaderFooterView ?
fuente
Si headerInSection no se muestra, puede probar esto.
Esto devuelve una altura para el encabezado de una sección determinada.
fuente
La versión Swift 3 de lochana y estemendoza responde:
Además, tenga en cuenta que TAMBIÉN debe implementar:
fuente
Prueba esto......
fuente
Las otras respuestas hacen un buen trabajo al recrear la vista de encabezado predeterminada, pero en realidad no responden su pregunta principal:
Hay una manera: simplemente implemente
tableView:willDisplayHeaderView:forSection:
en su delegado. La vista de encabezado predeterminada se pasará al segundo parámetro, y desde allí puede convertirla enUITableViewHeaderFooterView
ay luego agregar / cambiar subvistas como desee.Obj-C
Rápido
fuente
view
.fuente
Esta es la solución más fácil posible. El siguiente código se puede usar directamente para crear un encabezado de sección personalizado.
NOTA: SectionHeaderTableViewCell es un UITableViewCell personalizado creado en Storyboard.
fuente
Si yo fuera usted, haría un método que devuelva una UIView dada una NSString para contener. Por ejemplo
En la implementación de este método, cree un UIView, agregue un UILabel con las propiedades que desea establecer y, por supuesto, establezca su título en el dado.
fuente
La solución de @ samwize en Swift (¡así que vota!). Brillante usando el mismo mecanismo de reciclaje también para secciones de encabezado / pie de página:
fuente
Si desea cambiar la fuente de textLabel en el encabezado de su sección, desea hacerlo en willDisplayHeaderView. Para configurar el texto, puede hacerlo en viewForHeaderInSection o titleForHeaderInSection. ¡Buena suerte!
fuente
Ejemplo completo de 2019 para copiar y pegar
Primero configure "Agrupado" en el guión gráfico: tiene que suceder en el momento inicial, realmente no puede configurarlo más tarde, por lo que es más fácil recordar hacerlo en el guión gráfico:
Próximo,
Debe implementar heightForHeaderInSection debido a un error de Apple.
Todavía hay un error de Apple, durante diez años, donde simplemente no mostrará el primer encabezado (es decir, el índice 0) si no tiene
heightForHeaderInSection
llamada.Entonces,
tableView.sectionHeaderHeight = 70
simplemente no funciona, está roto .Establecer un marco no logra nada:
En
viewForHeaderInSection
simplemente crear un UIView ().No tiene sentido / no logra nada si UIView (marco ...) ya que iOS simplemente establece el tamaño de la vista según lo determinado por la tabla.
Entonces, la primera línea de
viewForHeaderInSection
será simplelet view = UIView()
y esa es la vista que devuelve.Eso es todo, cualquier otra cosa es una pérdida de tiempo.
Otro problema de Apple "quisquilloso".
La extensión de conveniencia utilizada anteriormente es:
fuente
Agregue mágicamente el encabezado de vista de tabla rápidamente
Recientemente probé esto.
Necesitaba uno y solo un encabezado en todo UITableView.
Como si quisiera un UIImageView en la parte superior de TableView. Así que agregué un UIImageView encima de UITableViewCell y automáticamente se agregó como tableViewHeader. Ahora conecto el ImageView al ViewController y agrego la imagen.
Estaba confundido porque hice algo así por primera vez. Entonces, para aclarar mi confusión, abra el formato xml de MainStoryBoard y descubrí que la Vista de imagen se agregó como encabezado.
Funcionó para mi. Gracias xCode y swift.
fuente
llamar a este método delegado
esto le dará la oportunidad de agregar automáticamente un encabezado predeterminado con título dinámico.
Puede usar encabezado / pie de página reutilizable y personalizable.
https://github.com/sourov2008/UITableViewCustomHeaderFooterSection
fuente
swif 4.2
fuente
Además de titleForHeaderInSection, simplemente puede cambiar la vista del encabezado, pie de página. revise mi comentario aquí: cambie el fondo de la sección UITableColor sin perder el título de la sección
fuente
Si solo desea agregar un título al encabezado tableView, no agregue una vista. En swift 3.x el código es así:
Puede implementar una matriz para obtener el título de los encabezados.
fuente
Volviendo a la pregunta original (4 años después), en lugar de reconstruir su propio encabezado de sección, iOS simplemente puede llamarlo (con willDisplayHeaderView: forSection :) justo después de haber creado el predeterminado. Por ejemplo, quería agregar un botón de gráfico en el borde derecho del encabezado de sección:
fuente
Utilizar
tableView: willDisplayHeaderView:
para personalizar la vista cuando esté a punto de mostrarse.Esto le brinda la ventaja de poder tomar la vista que ya se creó para la vista de encabezado y extenderla, en lugar de tener que volver a crear toda la vista del encabezado usted mismo.
Aquí hay un ejemplo que colorea la sección del encabezado según un BOOL y agrega un elemento de texto detallado al encabezado.
fuente
Swift 4.2
En Swift 4.2, el nombre de la tabla ha cambiado un poco.
fuente