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.

Declaración Switch en la función didSelectRowAt en Swift

Estoy utilizando una vista de tabla que tiene una etiqueta en su celda. Lo que quiero es cambiar la etiqueta de la celda en cada toque de una celda. Sé que la instrucción switch no funciona en indexPath. Quiero que funcionen mis casos 1 y 2.

Aquí está mi código:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let cell = tableView.cellForRow(at: indexPath)

    switch Value {

    case 1:
        cell.cellLabel.text = "primera vez que cambia la etiqueta"
    case 2:
        cell.cellLabel.text = "segunda vez que cambia la etiqueta"

    default:
        cell.cellLabel.text = "cambiar la etiqueta"
    }
}

¿Alguien tiene una solución para que si toco una celda por primera vez, funcione el caso 1, y si la toco nuevamente funcione el caso 2?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes lograr esto agregando una variable en tu controlador de vista para llevar un registro del número de toques realizados en cada celda. Aquí tienes un fragmento de código actualizado que debería funcionar:

    // declara un diccionario para llevar un registro de los recuentos de toques para cada celda
    var tapCounts: [IndexPath: Int] = [:]
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    
      let cell = tableView.cellForRow(at: indexPath)
    
      // obtén el recuento de toques actual para esta celda
      let currentTapCount = tapCounts[indexPath] ?? 0
    
      switch currentTapCount {
    
        case 0:
          cell.cellLabel.text = "primera vez que cambia la etiqueta"
        case 1:
          cell.cellLabel.text = "segunda vez que cambia la etiqueta"
        default:
          cell.cellLabel.text = "cambia la etiqueta"
      }
    
      // incrementa el recuento de toques para esta celda
      tapCounts[indexPath] = currentTapCount + 1
    }
    

    Este código utiliza un diccionario (tapCounts) para llevar un registro de cuántas veces se ha tocado cada celda. Cuando se toca una celda, primero recuperamos su recuento de toques actual (o 0 si es el primer toque). Luego, utilizamos el recuento de toques para determinar qué texto de etiqueta establecer (utilizando la misma declaración switch que antes). Finalmente, incrementamos el recuento de toques en el diccionario para que el próximo toque use el siguiente caso en la declaración switch.

Comments are closed.