SwiftUI TabView 在每次点击时设置默认页面
SwiftUI TabView set default page on each tap
我是 SwiftUI 的新手,我正在尝试了解如何设置保持不变的 TabView 的默认页面
我的 TabView 嵌套在 ListView 中,我设置了 @State private var selection = 1
,当应用程序首次启动并且 TabView 按预期在第 1 页打开时工作正常。
但是,如果用户滑动到另一个选项卡,然后点击后退按钮 return 到 ListView,下次他们打开选项卡视图时,它会从他们上一个选项卡开始, 而不是选项卡 1
这是我的 ListView,其中嵌套了 TabView
import SwiftUI
struct Exercises: View {
@Environment(\.managedObjectContext) var managedObjectContext
var muscleGroup: String
//set initial exercise page to show
@State private var selection = 1
@FetchRequest var exercises: FetchedResults<WatchMainExercises>
init(muscleGroup: String) {
self.muscleGroup = muscleGroup
self._exercises = FetchRequest(
entity: WatchMainExercises.entity(),
sortDescriptors: [NSSortDescriptor(key: "name", ascending: true)],
predicate: NSPredicate(format: "\(muscleGroup.lowercased()) == 1")
)
}
var body: some View {
List(exercises){ exercise in
NavigationLink(destination:
TabView(selection: $selection) {
Exercise_Sets(exercise: exercise)
.tag(0)
.navigationTitle(Text("Close"))
Exercise_Animation(exercise: exercise)
.tag(1)
.navigationTitle(Text("Close"))
Exercise_Info(exercise: exercise)
.tag(2)
.navigationTitle(Text("Close"))
}
.tabViewStyle(.page)
.environment(\.managedObjectContext, self.managedObjectContext)) {
ExerciseCell(name: exercise.name!, image: exercise.ensemblesID!, tintColor: DataHelper.checkDifficulty(record: exercise), exercise: exercise)
}
.navigationTitle("Exercises")
.navigationBarTitleDisplayMode(.inline)
}
}
}
目前,标签页只是将练习对象作为参数的空白结构
每次用户从 TabView 返回时,我如何将初始 TabView 设置为第 1 页,或者是否有设置恒定初始标签页的方法
我花了很长时间寻找类似的问题,但找不到任何解决问题的方法
如有任何帮助,我们将不胜感激
提前致谢
您可以在 TabView 上调用 onAppear 以在每次视图出现时设置所需的标签。
TabView(selection: $selection) {
// your pages...
}
.onAppear {
selection = 1
}
我是 SwiftUI 的新手,我正在尝试了解如何设置保持不变的 TabView 的默认页面
我的 TabView 嵌套在 ListView 中,我设置了 @State private var selection = 1
,当应用程序首次启动并且 TabView 按预期在第 1 页打开时工作正常。
但是,如果用户滑动到另一个选项卡,然后点击后退按钮 return 到 ListView,下次他们打开选项卡视图时,它会从他们上一个选项卡开始, 而不是选项卡 1
这是我的 ListView,其中嵌套了 TabView
import SwiftUI
struct Exercises: View {
@Environment(\.managedObjectContext) var managedObjectContext
var muscleGroup: String
//set initial exercise page to show
@State private var selection = 1
@FetchRequest var exercises: FetchedResults<WatchMainExercises>
init(muscleGroup: String) {
self.muscleGroup = muscleGroup
self._exercises = FetchRequest(
entity: WatchMainExercises.entity(),
sortDescriptors: [NSSortDescriptor(key: "name", ascending: true)],
predicate: NSPredicate(format: "\(muscleGroup.lowercased()) == 1")
)
}
var body: some View {
List(exercises){ exercise in
NavigationLink(destination:
TabView(selection: $selection) {
Exercise_Sets(exercise: exercise)
.tag(0)
.navigationTitle(Text("Close"))
Exercise_Animation(exercise: exercise)
.tag(1)
.navigationTitle(Text("Close"))
Exercise_Info(exercise: exercise)
.tag(2)
.navigationTitle(Text("Close"))
}
.tabViewStyle(.page)
.environment(\.managedObjectContext, self.managedObjectContext)) {
ExerciseCell(name: exercise.name!, image: exercise.ensemblesID!, tintColor: DataHelper.checkDifficulty(record: exercise), exercise: exercise)
}
.navigationTitle("Exercises")
.navigationBarTitleDisplayMode(.inline)
}
}
}
目前,标签页只是将练习对象作为参数的空白结构
每次用户从 TabView 返回时,我如何将初始 TabView 设置为第 1 页,或者是否有设置恒定初始标签页的方法
我花了很长时间寻找类似的问题,但找不到任何解决问题的方法
如有任何帮助,我们将不胜感激
提前致谢
您可以在 TabView 上调用 onAppear 以在每次视图出现时设置所需的标签。
TabView(selection: $selection) {
// your pages...
}
.onAppear {
selection = 1
}