SwiftUI 破坏性按钮样式

gur*_*gui 2 button swiftui

有没有办法Button在 SwiftUI 中获得破坏性的风格?我知道我可以为 a 做到这一点ContextMenu,但我没有找到“正常”的方法Button

干杯

Moj*_*ini 5

iOS 15

从 iOS 15 开始,您可以(并且应该!)Role为每个按钮分配一个,例如:

Button("Delete", role: .destructive) {
     deleteSomething()
}
Run Code Online (Sandbox Code Playgroud)

将角色分配给按钮有助于系统为使用该按钮的每个上下文应用正确的样式(例如像这个上下文菜单的示例

更多定制

您可以创建修饰符组合来创建所需的样式。

演示

演示

上面例子的代码:

VStack {
            
      Button("Plain", role: .none, action: { })
      .buttonStyle(PlainButtonStyle())

      Button("Automatic", role: .none, action: { })
      .buttonStyle(.automatic)

      Button("Log out", role: .cancel, action: { })
      .buttonStyle(BorderedButtonStyle())
      .tint(.yellow)

      // with controlSize
      Button("Cancel", role: .cancel, action: { })
      .buttonStyle(.borderless)
      .controlSize(.small)
      .tint(.yellow)

      Button("Delete", role: .destructive, action: { })
      .buttonStyle(.bordered)
      .controlSize(.regular)

      // with controlProminence
      Button(role: .destructive, action: { }, label: {
          Text("Exit").frame(maxWidth: .infinity)

      })
      .buttonStyle(.bordered)
      .controlSize(.large)
      .controlProminence(.increased)

      //with BorderedShape
      Button(role: .destructive, action: { }, label: {
          Text("Wow shape").frame(maxWidth: .infinity)
      })
      .buttonStyle(BorderedButtonStyle(shape: .capsule))
      .controlSize(.large)
      .controlProminence(.increased)
      .tint(.purple)
}
Run Code Online (Sandbox Code Playgroud)


Yon*_*nat 4

为了Button

Button("Tap") {
    // do something
}
.foregroundColor(.red)
Run Code Online (Sandbox Code Playgroud)

为了Alert

Alert(
    title: Text("Hi"),
    message: Text("Do it?"),
    primaryButton: .cancel(Text("Cancel")),
    secondaryButton: .destructive(Text("Delete")) {
        // do something
    }
)
Run Code Online (Sandbox Code Playgroud)

同样对于ActionSheet.