Tengo este ContentView con dos vistas modales diferentes, así que lo estoy usando sheet(isPresented:)
para ambos, pero parece que solo se presenta el último. ¿Cómo podría resolver este problema? ¿O no es posible usar varias hojas en una vista en SwiftUI?
struct ContentView: View {
@State private var firstIsPresented = false
@State private var secondIsPresented = false
var body: some View {
NavigationView {
VStack(spacing: 20) {
Button("First modal view") {
self.firstIsPresented.toggle()
}
Button ("Second modal view") {
self.secondIsPresented.toggle()
}
}
.navigationBarTitle(Text("Multiple modal view problem"), displayMode: .inline)
.sheet(isPresented: $firstIsPresented) {
Text("First modal view")
}
.sheet(isPresented: $secondIsPresented) {
Text("Only the second modal view works!")
}
}
}
}
El código anterior se compila sin advertencias (Xcode 11.2.1).
swift
modal-dialog
swiftui
probado
fuente
fuente
Respuestas:
Por favor, intente debajo del código
fuente
Su caso se puede resolver de la siguiente manera (probado con Xcode 11.2)
fuente
También puede agregar la hoja a un EmptyView colocado en el fondo de la vista. Esto se puede hacer varias veces:
fuente
Puede lograr esto simplemente agrupando el botón y las llamadas .sheet juntas. Si tiene uno al principio y otro al final, es así de simple. Sin embargo, si tiene múltiples elementos de barra de navegación en el inicio o al final, debe ajustarlos en un HStack y también ajustar cada botón con su hoja de llamada en un VStack.
Aquí hay un ejemplo de dos botones finales:
fuente
Además de la respuesta de Rohit Makwana , encontré una forma de extraer el contenido de la hoja a una función porque el compilador estaba teniendo dificultades para verificar mi gigantesco
View
.Puedes usarlo de esta manera:
Hace que el código sea más limpio y también alivia el estrés de su compilador.
fuente