SwiftUI中TabView选中标签索引获取异常问题求助
解决TabView无法获取正确选中标签索引的问题
嘿,我一眼就发现问题所在啦!你现在用的onTapGesture是给整个TabView容器添加的点击事件,这和TabView自身处理标签切换的逻辑冲突了——当你点击标签栏时,系统先处理标签切换的逻辑,但你的手势触发时机不对,导致打印的selectedItem并不是最新的选中值,甚至出现异常的0。
正确的做法是监听selectedItem的变化,而不是依赖点击手势。我们可以用SwiftUI的onChange修饰符来实现,它会在selectedItem的值真正更新时触发,能准确拿到最新的选中索引。
修改后的代码如下:
struct DefaultTabbar: View { @State private var selectedItem = 1 var body: some View { TabView(selection: $selectedItem) { FirstView() .tabItem{ Image(systemName: "house") Text("First Tab") } .tag(1) SecondView() .tabItem{ Image(systemName: "photo") Text("Second Tab") } .tag(2) } .accentColor(.orange) .onChange(of: selectedItem) { newValue in print("selected tab: \(newValue)") } } }
为什么这样能解决问题?
onChange(of: selectedItem)会精准监听selectedItem的数值变化,只要用户切换标签导致它更新,就会立刻触发闭包,拿到最新的newValue。- 你之前的
onTapGesture是给整个TabView加的点击事件,不仅会在点击标签栏时触发,点击TabView的内容区域也会触发,而且它无法保证在selectedItem更新后执行,所以才会出现错误的输出。
内容的提问来源于stack exchange,提问作者Kiran Jasvanee
相关产品推荐
相关产品推荐

