SwiftUI - OnExitCommand внутри TabView - PullRequest
0 голосов
/ 21 июня 2020

В последнее время я пытался создать приложение tvOS, но столкнулся со следующей довольно неприятной проблемой. Я не могу использовать навигацию внутри TabView, но кнопка меню при удалении все еще возвращает меня в предыдущее состояние.

struct TestView: View {
    
    @State var selection : Int = 0
    
    var body: some View {
        TabView(selection: self.$selection) {
            ExpView()
            .tabItem {
                HStack {
                    Image(systemName: "magnifyingglass")
                    Text("Explore")
                }
            }
            .tag(0)
        }
    }
}

struct ExpView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: DetailView(title: "Hey")) {
                Text("Detail")
            }
        }
    }
}

struct DetailView: View {
    var title : String
    var body: some View {
        VStack {
            Text(title)
        }
    }
}

Мой вопрос: есть ли способ включить кнопку меню go вернуться к предыдущему виду в иерархии, не закрывая приложение полностью?

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Итак, я нашел способ решения проблемы. Если вы поместите navigationView за пределы TabView, а затем используете следующий код, он будет работать:

struct TestView: View {
    
    @State var selection : Int = 0
    @State var hideNavigationBar : Bool
    
    var body: some View {
        NavigationView {
            TabView(selection: self.$selection) {
                ExpView(hideNavigationBar: self.$hideNavigationBar)
                .tabItem {
                    HStack {
                        Image(systemName: "magnifyingglass")
                        Text("Explore")
                    }
                }
                .tag(0)
            }
        }
    }
}

struct ExpView: View {
    
    @Binding var hideNavigationBar : Bool
    
    var body: some View {
        NavigationLink(destination: DetailView(title: "Hey")) {
            Text("Detail")
        }.navigationBarTitle("")
        .navigationBarHidden(self.hideNavigationBar)
        .onAppear {
            self.hideNavigationBar = true
        }
    }
}

struct DetailView: View {
    var title : String
    var body: some View {
        VStack {
            Text(title)
        }
    }
}
0 голосов
/ 21 июня 2020

Вам не нужно вызывать отклонение в меню, оно вызывается автоматически для NavigationLink (поэтому при вызове еще одного отклонения происходит выход в главное меню)

Вот фиксированные представления. Протестировано с Xcode 11.4

struct ExploreView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: DetailView(title: "Hey")) {
                Text("Detail")
            }
        }
    }
}

struct DetailView: View {

    var title : String
    var body: some View {
        VStack {
            Text(title)
        }
    }
}
...