SwiftUI pasa datos de vista a vista.
Pasé 14 horas tratando de resolverlo hoy, revisé y busqué en línea, y vi videos, pero nada ayudó. Me rendí, así que decidí hacer una pregunta.
Normalmente, tengo dos vistas en una, como la lista a la izquierda y los detalles a la derecha. En el iPhone, pude usar la hoja para mostrar la segunda vista sin problemas, pero en el iPad, tengo una segunda vista en el lado derecho y no se actualiza cuando hago clic en la lista. Intenté usar @Binging y @State, pero no funcionó.
¿Cómo puedo pasar datos de una vista a otra?
El código del enlace de navegación:
let navigationItemList: [NavigationItems] = [NavigationItems(image: Image(systemName: “hourglass”), title: “Feature 1”, subtitle: “Subtitle”, linkView: AnyView(FeatureView1())),
NavigationItems(image: Image(systemName: “clock.arrow.2.circlepath”), title: “Feature 2”, subtitle: “Subtitle”, linkView: AnyView(FeatureView2()))]
struct ContentView: View {
var body: some View {
NavigationView {
List {
Section(footer: MainFooterView()) {
ForEach(navigationItemList) { items in
HStack {
items.image?
.frame(width: 30, height: 30)
.font(.system(size: 25))
.foregroundColor(color3)
Text(“”)
NavigationLink(items.title, destination: items.linkView)
}
.listRowBackground(Color.clear)
.listRowSeparatorTint(.clear)
}
.navigationTitle("Features")
.listStyle(.insetGrouped)
}
}
}
}
Primera vista:
struct FeatureView1 : View {
var body: some View {
HStack {
List(item) { items in
Button("Haga clic para actualizar el título en Feature View 2") {
FeatureView2(title: "Botón llamado") //No sucedió nada
}
}
FeatureView2()
}
}
Segunda vista:
var body: some View {
var title = ""
ZStack {
Text(title) //Cuando hago clic en un botón de la lista, debería mostrar "Botón llamado", pero nada sucede.
}
}
davy.ai
Para pasar datos entre dos vistas en SwiftUI, puedes usar @State, @Binding o @ObservedObject. Dado que mencionaste que ya has intentado usar @State y @Binding pero no funcionó, puedes intentar usar @ObservedObject.
Así es como puedes usar @ObservedObject para pasar datos entre dos vistas:
Con este código, cuando haces clic en el botón en la primera vista, se actualiza la propiedad de título en la instancia de DataHolder. Dado que la segunda vista tiene acceso a la misma instancia de DataHolder a través de @EnvironmentObject, actualizará automáticamente el texto de la vista con el nuevo valor del título.
¡Espero que esto ayude!