【发布时间】:2021-12-30 09:50:41
【问题描述】:
我想在用户切换TabView 中的选项卡时执行功能。奇怪的是,我似乎无法用.simultaneousGesture 做到这一点。如果用户在选项卡视图中切换选项卡,如何执行功能?
示例代码:
struct ContentView: View {
@State var selectedTab: Int = 0
var body: some View {
NavigationView {
TabView(selection: $selectedTab) {
Text("View One")
.tabItem {
Text("View One")
}
.simultaneousGesture(TapGesture().onEnded {
print("This isn't printing")
})
Text("View Two")
.tabItem {
Text("View Two")
}
.simultaneousGesture(TapGesture().onEnded {
print("This isn't printing")
})
Text("View Three")
.tabItem {
Text("View Three")
}
.simultaneousGesture(TapGesture().onEnded {
print("This isn't printing")
})
}
}
}
}
编辑:更新代码
struct ContentView: View {
@State var selectedTab: Int = 0
var body: some View {
NavigationView {
TabView(selection: $selectedTab) {
Text("View One")
.tabItem {
Text("View One")
}
Text("View Two")
.tabItem {
Text("View Two")
}
Text("View Three")
.tabItem {
Text("View Three")
}
}
}
.onReceive(Just(selectedTab)) { thing in
print("Tapped!!")
print("\(thing)")
}
}
}
【问题讨论】:
-
这是否回答了您的问题stackoverflow.com/a/64020773/12299030?
-
我赞成您的回答,因为我认为它可以解决我的问题,但实际上并没有。我的发布者在视图初始化时打印一次,但在更改所选选项卡时不再打印。我会发布更新的代码
-
像往常一样,@Asperi 答案完美无缺。再看看他的代码。为了使选择起作用,您必须标记选项卡,否则系统不知道哪个是哪个。您在代码中忽略了这一点。在这种情况下,
.onReceive和Just发布者或.onChange(of:)都适用。显然,.onChange(of:)是 iOS 14+。 -
感谢您指出这一点!我忘了标签
标签: swiftui navigationview tabview