TabView(SwiftUI):在已经处于活动状态的tabItem上响应onTab [英] TabView (SwiftUI): Respond onTab on an already active tabItem
问题描述
我有一个ContentView.swift,其中包含一个TabView.
I have a ContentView.swift which contains a TabView.
View1中有一个带有一些childViews的NavigationView. View2只是一个View.
View1 has a NavigationView in it with some childViews. View2 is just a single View.
当我按下第一个tabItem时,我想执行一些操作(即使返回到View1的childView中,也要始终返回到View1). 即使它已经是活动的tabItem.
I would like to perform some action (always return to View1, even when being in a childView of View1), when the first tabItem is pressed. Even if it is already the active tabItem.
我尝试了如下所示的onTapGesture,但似乎没有做任何事情.就在".tag(0)"之前添加它也没有任何改变:
I tried onTapGesture as seen below, which didn't seem to do anything. Adding it right before ".tag(0)" didn't change anything, either:
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进行了测试
Here is possible approach. Tested with 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)
}
}
}
这篇关于TabView(SwiftUI):在已经处于活动状态的tabItem上响应onTab的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!