SwiftUI - TabView 内的 OnExitCommand
SwiftUI - OnExitCommand inside TabView
我最近一直在尝试制作一个 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)
}
}
}
我的问题是:有什么方法可以让菜单按钮返回到层次结构中的上一个视图,而无需完全关闭应用程序?
您不需要在菜单上调用 dismiss 它会自动为 NavigationLink 调用(因此再调用一次 dismiss 会退出到主菜单)
这里是固定的观点。使用 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)
}
}
}
所以我找到了解决该问题的方法。
如果将 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)
}
}
}
我最近一直在尝试制作一个 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)
}
}
}
我的问题是:有什么方法可以让菜单按钮返回到层次结构中的上一个视图,而无需完全关闭应用程序?
您不需要在菜单上调用 dismiss 它会自动为 NavigationLink 调用(因此再调用一次 dismiss 会退出到主菜单)
这里是固定的观点。使用 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)
}
}
}
所以我找到了解决该问题的方法。 如果将 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)
}
}
}