如何让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
相关产品推荐
相关产品推荐

