SwiftUI:根据选中的kartenTyp为3个按钮设置.buttonStyle(.bordered)
SwiftUI 动态切换按钮样式解决方案
问题分析
原代码存在两个核心问题:
- 按钮样式为固定设置,未根据
kartenTyp的状态动态切换 - 额外使用
onTapGesture处理点击事件,不符合SwiftUI按钮的标准交互逻辑
修正后的代码实现
// 先确保kartenTyp是可响应的状态属性 @State private var kartenTyp = 3 // 默认选中第三个按钮 HStack{ Text("Kartentyp") Spacer() Button("Standard") { kartenTyp = 1 } .tint(.blue) .buttonStyle(kartenTyp == 1 ? .bordered : .plain) Button("Satelit") { kartenTyp = 2 } .tint(.blue) .buttonStyle(kartenTyp == 2 ? .bordered : .plain) Button("Hybried") { kartenTyp = 3 } .tint(.blue) .buttonStyle(kartenTyp == 3 ? .bordered : .plain) }
关键改动说明
- 用
@State修饰kartenTyp,保证状态变化时视图自动刷新 - 将点击赋值逻辑移到Button自身的
action闭包中,这是SwiftUI处理按钮交互的标准方式 - 每个按钮的
.buttonStyle根据当前kartenTyp的值动态判断:当按钮对应的类型与kartenTyp匹配时应用.bordered样式,否则使用.plain(可根据需求替换为其他默认样式)
内容的提问来源于stack exchange,提问作者Laurent Wagner
相关产品推荐
相关产品推荐

