Saya memiliki ContentView ini dengan dua tampilan modal yang berbeda, jadi saya gunakan sheet(isPresented:)
untuk keduanya, tetapi sepertinya hanya yang terakhir yang disajikan. Bagaimana saya bisa mengatasi masalah ini? Atau apakah tidak mungkin untuk menggunakan banyak sheet pada tampilan di 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!")
}
}
}
}
Kode di atas dikompilasi tanpa peringatan (Xcode 11.2.1).
swift
modal-dialog
swiftui
diujicobakan
sumber
sumber
Jawaban:
Silakan coba kode di bawah ini
sumber
Kasus Anda dapat diselesaikan dengan mengikuti (diuji dengan Xcode 11.2)
sumber
Dapat juga menambahkan sheet ke EmptyView yang ditempatkan di latar belakang tampilan. Ini dapat dilakukan beberapa kali:
sumber
Anda dapat melakukannya hanya dengan mengelompokkan tombol dan panggilan lembar. Jika Anda memiliki satu pimpinan dan satu trailing, sesederhana itu. Namun, jika Anda memiliki beberapa bilah navigasi di bagian depan atau belakang, Anda harus membungkusnya dalam HStack dan juga membungkus setiap tombol dengan panggilan sheet-nya dalam VStack.
Berikut adalah contoh dua tombol tambahan:
sumber
Selain jawaban Rohit Makwana , saya menemukan cara untuk mengekstrak konten sheet ke suatu fungsi karena kompiler mengalami kesulitan mengetik-memeriksa raksasa saya
View
.Anda dapat menggunakannya dengan cara ini:
Itu membuat kode lebih bersih dan juga mengurangi tekanan kompiler Anda.
sumber