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

如何让SwiftUI按钮点击时从.bordered切换为.borderedProminent样式?

实现SwiftUI按钮点击切换样式(模拟按下状态)

当然可行,核心是用状态变量驱动按钮样式的动态切换——SwiftUI是声明式UI,视图变化需要依赖状态值的更新,你之前用action没成功,是因为没通过状态关联样式变化。

直接上解决方案代码:

struct ContentView: View {
    // 用状态变量跟踪按钮的"按下"状态
    @State private var isButtonPressed = false
    
    var body: some View {
        Button(action: {
            // 点击时切换状态值
            isButtonPressed.toggle()
        }, label: {
            Text("Xyz")
                .frame(minWidth: 0, maxWidth: .infinity)
        })
        .controlSize(.regular)
        // 根据状态动态切换按钮样式
        .buttonStyle(isButtonPressed ? .borderedProminent : .bordered)
        .buttonBorderShape(.automatic)
    }
}

关键说明:

  • @State private var isButtonPressed = false:这个状态变量负责记录按钮当前的视觉状态,初始为false对应默认的.bordered样式。
  • 按钮的action闭包里只需切换状态变量的值:isButtonPressed.toggle()。
  • buttonStyle通过三元运算符根据状态变量取值动态选择样式:isButtonPressed为true时用.borderedProminent,为false时回到.bordered。

每次点击按钮,样式会在两种状态间切换,完美模拟按钮保持按下的视觉效果。

内容的提问来源于stack exchange,提问作者Abrazjak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:05:18