SwiftUI 基础控件 - Button

512 阅读2分钟

在 SwiftUI 中,Button 是一个用于触发操作或响应用户交互的控件。与 UIKit 中的 UIButton 类似,SwiftUI 的 Button 控件也是高度自定义的,可以通过不同的修饰符来设置样式和行为。

  1. 基本用法

Button 的基本语法包括一个标签视图和一个闭包,闭包中定义按钮被点击时执行的操作:

Button("按钮") {
    print("点击事件")
}
  1. 使用图标和文本

可以通过在 Button 标签中放入 Image 视图、Text 视图,或者两者的组合来创建自定义的按钮内容:

Button(action: {
    print("点击事件")
}) {
    Image(systemName: "star.fill")
    Text("Favorite")
}
  1. 自定义样式的按钮

SwiftUI 提供了丰富的修饰符,可以用来定制按钮的外观,比如颜色、背景、圆角、阴影等:

Button(action: {
    print("Styled Button was tapped!")
}) {
    Text("自定义按钮")
        .padding()
        .foregroundColor(.white)
        .background(Color.blue)
        .cornerRadius(8)
}
  1. 结合状态使用按钮

通常,按钮会与 @State@Binding 等属性结合使用,以触发界面状态的更新。例如,创建一个计数器按钮,每点击一次计数加 1:

struct ContentView: View {
    @State private var count = 0

    var body: some View {
        VStack {
            Text("Count: \(count)")
            Button("加1") {
                count += 1
            }
            .padding()
            .background(Color.green)
            .foregroundColor(.white)
            .cornerRadius(8)
        }
    }
}
  1. 禁用按钮

可以使用 .disabled(_:) 修饰符来根据条件禁用按钮。被禁用的按钮不会响应点击事件,且会自动应用灰色的样式:

Button("提交") {
    print("点击事件")
}
.disabled(count == 0) // 当 count 为 0 时禁用按钮
  1. 使用 Button 的预定义样式

SwiftUI 提供了一些内置的按钮样式,如 .bordered().plain().link() 等,可以简化常见按钮样式的定义:

Button("Bordered Button") {
    print("Bordered button tapped!")
}
.buttonStyle(.bordered)

Button("Link Button") {
    print("Link button tapped!")
}
.buttonStyle(.link)
  1. 按钮的长按事件

SwiftUI 的按钮默认支持长按操作,可以结合 onLongPressGesture 使用:

Button("长按") {
    print("点击事件")
}
.onLongPressGesture {
    print("长按事件")
}

总结

SwiftUI 的 Button 控件支持高度自定义,可以用各种样式和状态结合的方式轻松创建按钮。无论是简单的文本按钮,还是图标与渐变效果的组合,SwiftUI 都提供了简洁且直观的实现方式。