Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

96
Vistas
La actualización de un valor de enlace vuelve a la vista principal en la pila de navegación

Estoy pasando un binding de Person de la primera vista a la segunda vista a la tercera vista, cuando actualizo el valor de binding en la tercera vista, aparece de nuevo en la segunda vista, entiendo que SwiftUI actualiza las vistas que dependen del valor del estado , pero ¿abrir la vista actual es el comportamiento esperado o estoy haciendo algo mal?

 struct Person: Identifiable { let id = UUID() var name: String var numbers = [1, 2] }
 struct FirstView: View { @State private var people = [Person(name: "Current Name")] var body: some View { NavigationView { List($people) { $person in NavigationLink(destination: SecondView(person: $person)) { Text(person.name) } } } } }
 struct SecondView: View { @Binding var person: Person var body: some View { Form { NavigationLink(destination: ThirdView(person: $person)) { Text("Update Info") } } } }
 struct ThirdView: View { @Binding var person: Person var body: some View { Form { Button(action: { person.numbers.append(3) }) { Text("Append a new number") } } } }

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

SwiftUI funciona actualizando las vistas renderizadas para que coincidan con lo que tiene en su estado.

En este caso, primero tiene una lista que contiene un elemento llamado Current Name . Con un enlace de NavigationLink , selecciona este elemento.

Actualizas el nombre y ahora que el elemento anterior ya no existe, ha sido reemplazado por un nuevo elemento llamado New Name .

Dado que el Current Name ya no existe, tampoco se puede seleccionar más y la vista vuelve a aparecer en la lista.

Para poder editar el nombre sin volver a aparecer, deberá asegurarse de que el elemento de la lista sea el mismo, incluso si el nombre ha cambiado. Puede hacer esto usando una struct Identifiable en lugar de una String .

 struct Person: Identifiable { let id = UUID().uuidString var name = "Current Name" } struct ParentView: View { @State private var people = [Person()] var body: some View { NavigationView { List($people) { $person in NavigationLink(destination: ChildView(person: $person)) { Text(person.name) } } } } } struct ChildView: View { @Binding var person: Person var body: some View { Button(action: { person.name = "New Name" }) { Text("Update Name") } } }
over 4 years ago · Santiago Trujillo Denunciar

0

Al navegar dos veces, debe usar isDetailLink(false) o StackNavigationViewStyle , por ejemplo

 struct FirstView: View { @State private var people = [Person(name: "Current Name")] var body: some View { NavigationView { List($people) { $person in NavigationLink(destination: SecondView(person: $person)) { Text(person.name) } .isDetailLink(false) // option 1 } } .navigationViewStyle(.stack) // option 2 } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda