如何根据点击的选项修改SwiftUI Picker的选中值?
SwiftUI Picker 获取选中值并处理变化
你的问题出在使用onTapGesture的时机不对——这个手势会在Picker的选中值更新之前触发,所以你打印的始终是点击前的旧值,导致输出结果不符合预期。
正确的做法是监听绑定的option变量的变化,而不是监听点击手势。SwiftUI提供了.onChange(of:)修饰符,专门用来响应变量值的更新:
@State var option = 0 Picker("", selection: $option) { Text("1").tag(0) Text("2").tag(1) Text("3").tag(2) } .pickerStyle(.segmented) .onChange(of: option) { newValue in // newValue 就是用户刚选中的选项对应的tag值 print(newValue) switch newValue { case 0: print("1") case 1: print("22") case 2: print("3") default: break } }
说明:
- Picker通过
selection: $option已经自动完成了选中值的绑定,用户点击选项时option会自动更新为对应tag的值,不需要手动修改选中状态。 .onChange(of: option)会在option的值发生变化时立即触发,newValue参数就是最新的选中值,能准确获取用户点击的选项。
内容的提问来源于stack exchange,提问作者Adariel Lzinski
相关产品推荐
相关产品推荐

