Pasando el valor del controller de vista de tabla para ver el controller

Intenté pasar el valor de la celda en la que el usuario hace clic en otro controller de vista.

Aquí está mi código.

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { productDisplayed = currentProductList[indexPath.row] as? Product performSegue(withIdentifier: "ProductDetailSegue", sender: self) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if ( segue.identifier == "AddProductSegue"){ let controller: AddProductViewController = segue.destination as! AddProductViewController controller.delegate = self } if ( segue.identifier == "ProductDetailSegue"){ let controller: ProductDetailsViewController = segue.destination as! ProductDetailsViewController controller.currentProduct = productDisplayed } } 

En primer lugar, no escribí "performSegue ()". El problema que encontré es que la pantalla se transferirá en primer lugar en lugar de asignar el valor a "productDisplayed", lo que significa que el object "currentProduct" en el segundo VC es nulo.

Luego agregué "performSegue ()". Todavía no funcionó. La cosa es que la segunda pantalla se muestra dos veces. La primera vez es igual con la image de arriba. Y la segunda vez es correcta.

Pero cuando traté de hacer clic en el button Atrás en la parte superior izquierda. Volvió a la página nula en lugar de a la página ProductDetail. La captura de pantalla es la siguiente.

introduzca la descripción de la imagen aquí

introduzca la descripción de la imagen aquí

Parece que el método "preparar" siempre se llama primero, luego a la tablaView. ¿Cómo cambiar el order? Si puede, esto debería arreglarse, creo.

Espero get tu ayuda. Gracias.

La causa del problema:
En su guión gráfico, puede tener vinculado, ProductDetailsViewController con UITableViewCell directamente.

Significa, onclick / seleccionar la fila, ejecutará la operación segue (navigation) directamente.

Al mismo time, programáticamente realiza la operación de navigation usando performSegue(withIdentifier: "ProductDetailSegue", sender: self)

Solución:
Tiene dos forms de resolver este problema.

  1. Recomiendo: en su tablero de historia, cambie la connection segue de UITableViewCell a UIViewController (Quite la connection segue de UITableViewCell y conecte la misma connection segue con UIViewController de su tableview)
  2. En su código fuente, elimine / elimine esta línea performSegue(withIdentifier: "ProductDetailSegue", sender: self) y maneje la transmisión de datos de esta function. override func prepare(for segue: UIStoryboardSegue, sender: Any?)