Код: Выделить всё
alert и .sheetСуществует ли собственный шаблон SwiftUI для представления глобальных оповещений/листов/модальных окон поверх всего — без моста UIKit и без перестройки пользовательских интерфейсов оповещений?
Вопрос
Я ищу способ в SwiftUI отображать оповещения или таблицы для всего приложения, независимо от того, где в настоящее время находится пользователь в иерархии представлений.
В UIKit это было просто: я просто поднялся по цепочке PresentViewController и вызвал Present(...) на самом верхнем контроллере представления.
В SwiftUI этот подход не транслируется, потому что .alert и .sheet и т. д. относятся к видимой в данный момент иерархии представлений.
Код: Выделить всё
class AppController: ObservableObject {
@Published var isShowingAlert = false
@Published var isShowingSheet = false
@Published var isShowingMsg = false
func showAlert() { isShowingAlert = true }
func showSheet() { isShowingSheet = true }
func showMsg() { isShowingMsg = true }
}
struct RootView: View {
@StateObject var appController = AppController()
var body: some View {
VStack {
Button("Show Alert") { appController.showAlert() }
Button("Show Sheet") { appController.showSheet() }
Button("Show Msg") { appController.showMsg() }
}
.alert("Title", isPresented: $appController.isShowingAlert) { }
.sheet(isPresented: $appController.isShowingSheet) {
SubViewA(appController: appController)
}
// additional modal
.sheet(isPresented: $appController.isShowingMsg) {
Text("Message")
}
}
}
struct SubViewA: View {
@ObservedObject var appController: AppController
var body: some View {
VStack {
Text("SubViewA")
// Will dissmiss SubViewA-Sheet and show alert on RootView
Button("Show Alert") { appController.showAlert() }
// Fails
Button("Show Msg") { appController.showMsg() }
}
}
}
Код: Выделить всё
SubViewAТо, что я ищу
Чистое решение SwiftUI, которое:
- нет возврата к UIKit
- позволяет глобальное представление предупреждений/листа
- показывает их над представленными в настоящее время листами
- не полагается на UIKit (UIViewController, Present(...))
- не требует полностью настраиваемых реализаций предупреждений
Существует ли рекомендуемый SwiftUI-native шаблон для глобального, независимого от иерархии модального представления? Или это просто невозможно с текущей системой представления SwiftUI?
Подробнее здесь: https://stackoverflow.com/questions/798 ... ui-central
Мобильная версия