es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Celda de encabezado de UITableView en Swift

Estoy utilizando un UITableView con el encabezado. Para el encabezado, uso viewForHeaderInSection. Tengo una etiqueta y un botón en mi celda de encabezado. También tengo un array para asignar un nombre a la etiqueta de mi celda de headerView. Mi array es

let cellArray = ["Gato", "Perro", "Ratón", "Jirafa", "Cebra"]

Estoy agregando una función @objc para el botón de la celda de headerView y usando el tag para el botón.

Aquí está mi código:

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

    let headerView = tableView.dequeueReusableCell(withIdentifier: "HeaderTableViewCell") as! HeaderTableViewCell

    headerView.cellLabel.text = self.cellArray[section]
    headerView.cellButton.tag = section
    headerView.cellButton.addTarget(self, action: #selector(expandRow(sender:)), for: .touchUpInside)

    return headerView
}

Mi pregunta es: quiero cambiar la etiqueta cellLabel en la función @objc de la celda seleccionada. Supongamos que toco la primera celda, quiero cambiar el nombre de la etiqueta de la primera celda pero no sé cómo hacerlo.

Esto sería fácil si estuviéramos usando las filas en lugar de los encabezados, ya que hay cellForRowAt para las filas. Pero no puedo acceder a esa celda de encabezado seleccionada.

¿Alguien tiene la solución?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para acceder a la celda del encabezado seleccionada, puedes seguir los siguientes pasos:

    1. Crea una variable para almacenar la sección seleccionada:
      var selectedSection: Int?
      
    2. Actualiza la función expandRow para almacenar la sección seleccionada en la variable:
      @objc func expandRow(sender: UIButton) {
         selectedSection = sender.tag
      
         // realiza cualquier otra acción que necesites para el toque del botón
      }
      
    3. Utiliza la función headerView(forSection:) para obtener la vista del encabezado actual para la sección seleccionada:
      if let headerView = tableView.headerView(forSection: selectedSection) as? HeaderTableViewCell {
         headerView.cellLabel.text = "Nuevo nombre de etiqueta"
      }
      

      Puedes utilizar este código para actualizar el nombre de la etiqueta de la celda del encabezado seleccionada.

      Ten en cuenta que es posible que necesites desempaquetar forzosamente headerView o utilizar enlace opcional dependiendo de tu implementación.

Comments are closed.