Ios 选项卡视图(SwiftUI):对已激活的选项卡项响应onTab
我有一个ContentView.swift,它包含一个选项卡视图 View1中有一个NavigationView,其中包含一些子视图。 View2只是一个视图 当按下第一个选项卡项时,我想执行一些操作(始终返回到View1,即使在View1的子视图中也是如此)即使它已经是活动选项卡项。 我尝试了如下所示的手势,但似乎没有任何效果。在“.tag(0)”之前添加它也不会改变任何内容:Ios 选项卡视图(SwiftUI):对已激活的选项卡项响应onTab,ios,swift,swiftui,Ios,Swift,Swiftui,我有一个ContentView.swift,它包含一个选项卡视图 View1中有一个NavigationView,其中包含一些子视图。 View2只是一个视图 当按下第一个选项卡项时,我想执行一些操作(始终返回到View1,即使在View1的子视图中也是如此)即使它已经是活动选项卡项。 我尝试了如下所示的手势,但似乎没有任何效果。在“.tag(0)”之前添加它也不会改变任何内容: TabView {
TabView {
View1()
.onTapGesture {
print("Test")
}
.tabItem {
Image(systemName: "doc.plaintext")
.font(.system(size: 25))
Text("View1")
}.tag(0)
View2()
.tabItem {
Image(systemName: "person.crop.circle")
.font(.system(size: 25))
Text("View2")
}.tag(1)
以下是可能的方法。使用Xcode 11.4/iOS 13.4进行测试
struct TestTabSelectionAction: View {
@State private var selectedTab = 0
var body: some View {
let selection = Binding<Int>(
get: { self.selectedTab },
set: { self.selectedTab = $0
print("Pressed tab: \($0)")
if $0 == 0 {
// <<< your action here !!
}
})
return TabView(selection: selection) {
View1()
.tabItem {
Image(systemName: "doc.plaintext")
.font(.system(size: 25))
Text("View1")
}.tag(0)
View2()
.tabItem {
Image(systemName: "person.crop.circle")
.font(.system(size: 25))
Text("View2")
}.tag(1)
}
}
}
struct TestTabSelectionAction:View{
@状态私有变量selectedTab=0
var body:一些观点{
让选择=绑定(
获取:{self.selectedTab},
集合:{self.selectedTab=$0
打印(“按下的选项卡:\($0)”)
如果$0==0{
//对选项卡项(或分段控件)执行此操作的典型需要就是滚动到标签内容的顶部,这个答案并不是一个很好的解决方案。你所知道的只是被按下标签的索引,你没有访问标签本身的权限。如果你看到其他问题在他们特别要求时是如何重复的,也许你应该写一个更广泛的答案(或者停止使用modhammer for Duppes来回答您自己的问题)此解决方案完全解决了问题中描述的问题。也许它不能解决其他要求,但对于那些要求,您可以提出新的问题。