uitableviewcontroller tutorial custom ios uitableview swift header nsindexpath

ios - tutorial - tableView los encabezados de sección desaparecen SWIFT



uitableview tutorial swift 4 (6)

Como todavía no tengo la reputación de 50, no puedo comentar sobre la respuesta anterior, así que me disculpo por incluir esto como otra respuesta.

Devolver el ContentView hará que la función funcione, pero eliminará todo el formato realizado al reuseIdentifier (headerCell)

headerCell.backgroundColor = UIColor.cyanColor()

Esto NO proporcionará un color cian a su headerCell

Para solucionar esto, simplemente agregue ".contentView" a sus líneas de formato

headerCell.contentView.backgroundColor = UIColor.cyanColor()

Tengo una configuración tableView configurada para que cuando se toca una celda, se expande en altura para revelar más información. El tableView tiene 5 secciones.

Tengo un error: cuando una celda se expande, todas las cabeceras de las celdas debajo de esa celda se vuelven invisibles. La consola muestra lo siguiente: "[31233: 564745] no hay ruta de índice para la celda de la tabla que se está reutilizando"

En mi guión gráfico tengo 2 celdas personalizadas: "myCell" para las celdas que contienen datos, y "headerCell" para los encabezados.

func tableView (tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

let thisGoal : GoalModel = goalArray[indexPath.section][indexPath.row] if self.currentPath != nil && self.currentPath == indexPath { self.currentPath = nil } else { self.currentPath = indexPath } tableView.beginUpdates() tableView.endUpdates() }

Si ingreso tableView.reloadData () entre las actualizaciones de inicio / finalización, funciona correctamente, aunque el fondo del encabezado se vuelve negro y pierde la animación.

Tengo todas las cosas para los encabezados declarados en: func tableView (tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

¿Qué me estoy perdiendo? Realmente me gustaría que el tableView todavía tenga animaciones, y mantenga el fondo claroColor ().

Gracias por adelantado. Leí las respuestas objetivas de C, pero no conseguí que funcionaran para mí. Realmente apreciaría alguna ayuda de SWIFT.

Creo que el problema es la no ruta de índice para la celda de la tabla que se reutiliza.


Encontré una respuesta en la salida de la consola. Use este código en la función de encabezado:

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

No devuelva su headerCell , o su identificador reutilizable. Devuelve el reuseIdentifier.contentView . Para mí es: return headerCell!.contentView .


Los encabezados de vista de tabla en 2 tablas desaparecieron cuando convertí mi aplicación a IOS 10: encontré el motivo en la documentación de la API de desarrollador de Apple en los encabezados de tabla. Cuando agregué lo siguiente, ¡los encabezados faltantes reaparecieron!

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 44 // where 44 is the header cell view height in my storyboard }


Podrías envolver el tableviewcell dentro de un UIView

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let containerView = UIView() guard let headerCell = tableView.dequeueReusableCell(withIdentifier: "MyHeaderView") as? MyHeaderView else { fatalError(" Failed to load MyHeaderView") } containerView.addSubview(headerCell) return containerView

}


Solo para agregar, me quedé desconcertado por MUCHO más tiempo del que debería haber estado en cuanto a por qué no podía referirme al contenido Vista de mi celular, cuando podía ver claramente que estaba allí. Mi clase personalizada (utilizando UITableViewCell en lugar de UITableViewHeaderFooterView) devolvería un error fatal cada vez. Por lo tanto, asegúrese de que todo estilo personalizado esté configurado en la clase UITableViewHeaderFooterView como:

class CustomHeaderCell: UITableViewHeaderFooterView {

También necesitarás registrar el ResuableIdentifer de esta manera:

tableView.registerNib(UINib(nibName: "HeaderCell", bundle: nil), forHeaderFooterViewReuseIdentifier: "CellHeader")

Entonces este chico malo:

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let headerCell = tableView.dequeueReusableHeaderFooterViewWithIdentifier("CellHeader") as! CustomHeaderCell! return headerCell!.contentView }


Tuve el mismo error porque estaba devolviendo una celda utilizando el método de salida en cola en lugar de un UITableViewHeaderFooterView .

Solución:

  • Agregar una vista fuera de la jerarquía de vistas
  • Establece el tipo en UITableViewHeaderFooterView
  • Personalizar
  • Enlace a un @IBOutlet
  • En func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? devuelve la salida

Errores comunes:

No se olvide de establecer los tamaños de los encabezados No se olvide de configurar la salida como fuerte.