#swiftui #alert #swiftui-navigationlink
Вопрос:
в предыдущих потоках по этому вопросу были не быстрые ответы, которые я не могу понять, как реализовать в SwiftUI. Пожалуйста, обратите внимание, что я использую Xcode 12.5.
Я создал игровую площадку в попытке опубликовать «демонстрационную» версию кода, но разве вы не знаете, что игровая площадка работает безупречно. Итак, я собираюсь опубликовать небольшие фрагменты кода, не заставляя ваши глаза кровоточить. Я получаю это предупреждение:
pushViewController:анимированный: вызывается <TtGC7SwiftUI41StyleContextSplitViewNavigationControllerVS_19SidebarStyleContext 0x103021c00> во время существующего перехода или представления; стек навигации не будет обновляться>.
Вот как работает код:
Перейдите от представления A к представлению B. В навигационной ссылке View A я запускаю это:
NavigationLink(destination: MainScreen(user: user)) {
CapsuleButtonView(txt: "LOGIN")
}.simultaneousGesture(TapGesture().onEnded {
user.login()
})
.padding([.leading, .bottom, .trailing])
user.login() проверяет, введены ли имя пользователя и пароль (привязки). Если нет, он переворачивает @Published Bool, который представление, выполняющее приведенный выше код, использует для запуска предупреждающего сообщения:
.alert(isPresented: $user.alert, content: {
Alert(title: Text("Message"), message: Text(user.alertMsg), dismissButton: .destructive(Text("Ok")))
})
Предупреждение появляется, как и должно быть, но я думаю, что оно появляется после того, как навигационная ссылка начала переходить от представления A к представлению B. Таким образом, после появления предупреждения блок одновременной настройки навигационной ссылки все еще запускает код в нем (я проверил с помощью инструкции print), но НЕ переходит к представлению B.
Спасибо за вашу помощь, ребята. После 3 дней такого поиска я собираюсь вырвать те немногие волосы, которые у меня остались.
Комментарии:
1. Запустил свою процедуру внутри кнопки, а не с помощью кнопки в навигационной ссылке. Затем использовал логический вывод из вышеупомянутого маршрута, чтобы перейти к следующему представлению. Навигационная ссылка(пункт назначения: View2(), активна: $navigate) { Пустой просмотр() }.