У меня есть этот ContentView с двумя различными модальными представлениями, поэтому я использую sheet(isPresented:)
оба, но, как кажется, представлен только последний. Как я мог решить эту проблему? Или невозможно использовать несколько листов для просмотра в 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!")
}
}
}
}
Приведенный выше код компилируется без предупреждений (Xcode 11.2.1).
swift
modal-dialog
swiftui
turingtested
источник
источник
Ответы:
Пожалуйста, попробуйте ниже код
источник
Ваш случай может быть решен с помощью следующего (протестировано с Xcode 11.2)
источник
Можно также добавить лист в EmptyView, размещенный на фоне представления. Это можно сделать несколько раз:
источник
Это можно сделать, просто сгруппировав вызовы кнопки и таблицы. Если у вас есть один ведущий и один трейлинг, это так просто. Однако, если у вас есть несколько навигационных элементов в начале или конце, вам нужно обернуть их в HStack, а также обернуть каждую кнопку своим вызовом листа в VStack.
Вот пример двух конечных кнопок:
источник
В дополнение к ответу Рохита Макваны , я нашел способ извлечь содержимое листа в функцию, потому что компилятору было сложно проверять мой гигантский тип
View
.Вы можете использовать это так:
Это делает код чище, а также снимает стресс вашего компилятора.
источник