Я создал простое представление, действующее как панель навигации, которая содержит кнопку меню и некоторый текст. Я использую это как элемент верхнего уровня за пределами моего NavigationView
, который позволяет мне иметь статическое представление для всех дочерних страниц, которые попадают в поле зрения. Причина, по которой я пытаюсь не использовать панель навигации по умолчанию с элементами панели навигации, заключается в том, чтобы избежать увольнения / создания, которое вы получаете вместе с затухающей анимацией при переключении представлений.
Проблема, с которой я сейчас сталкиваюсь, заключается в том, чтобы отклонить дочернее представление, когда я ушел от родительского представления. Я могу обновить кнопку со значка меню до значка назад, но действие кнопки не запускается. Я искал в Интернете, чтобы узнать, сделал ли кто-нибудь что-то подобное, но ему не повезло, я не уверен, что то, чего я пытаюсь достичь, возможно, и правильно ли я иду в этом направлении. Есть ли способ вызвать self.presentationMode.wrappedValue.dismiss()
из дочерних представлений, даже если заголовок инициализирован в корневом представлении? Любая помощь приветствуется, вот что у меня есть:
Корневой вид (View1):
struct View1: View {
@State var showMenuButton: Bool = false
var body: some View {
VStack {
CustomNavigationView(showMenuButton: self.showMenuButton)
NavigationView {
NavigationLink(destination: View2()) {
Text("View 2")
}
.navigationBarTitle("")
.navigationBarHidden(true)
.onDisappear(){
self.showMenuButton = false
}
.onAppear() {
self.showMenuButton = true
}
}
}
}
}
Детский вид корневого представления (View2):
struct View2: View {
var body: some View {
VStack{
Text("This is View 2")
.navigationBarTitle("")
.navigationBarHidden(true)
NavigationLink(destination: View3()) {
Text("View 3")
}
}
}
}
Детский вид представления 2 (View3):
struct View3: View {
var body: some View {
VStack{
Text("This is View 3")
.navigationBarTitle("")
.navigationBarHidden(true)
}
}
}
Пользовательский вид навигации:
struct CustomNavigationView: View {
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
var showMenuButton = false
var body: some View {
VStack {
HStack {
if showMenuButton {
Button(action: {
//Do Something
}) {
Image(systemName: "line.horizontal.3")
.foregroundColor(.black)
}
} else {
Button(action: { self.presentationMode.wrappedValue.dismiss()}) {
Image(systemName: "arrow.left")
.foregroundColor(.black)
}
}
Text("Sometext")
}
}
}
}