You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI:根据选中的kartenTyp为3个按钮设置.buttonStyle(.bordered)

SwiftUI 动态切换按钮样式解决方案

问题分析

原代码存在两个核心问题:

  1. 按钮样式为固定设置,未根据kartenTyp的状态动态切换
  2. 额外使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:05:07