我想要一个带有一个运行某些代码的按钮的Alert
。我不希望有一个取消按钮。我只看到了一种使用两个按钮的方法,分别是primaryButton
和secondaryButton
。有没有办法做这样的事情?
答案 0 :(得分:1)
在SwiftUI中创建警报时,documentation是查看您可以使用的工具的好地方。
在创建警报部分,我们看到以下内容:
init(title: Text, message: Text?, primaryButton: Alert.Button, secondaryButton: Alert.Button)
使用两个按钮创建警报。
init(title: Text, message: Text?, dismissButton: Alert.Button?)
通过一个按钮创建警报。
如文档所述,要使用一个按钮创建警报,请选择第二个选项。
您可以在警报see here中使用四种不同的按钮类型。
static func cancel((() -> Void)?) -> Alert.Button
一个警告按钮,指示取消。
static func cancel(Text, action: (() -> Void)?) -> Alert.Button
创建一个Alert.Button,指示某些操作已取消。
static func default(Text, action: (() -> Void)?) -> Alert.Button
使用默认样式创建一个Alert.Button。
static func destructive(Text, action: (() -> Void)?) -> Alert.Button
创建一个Alert.Button,其样式指示破坏了某些样式 数据。
因此,根据您希望按钮执行的操作,有很多选项可供选择。请注意,对按钮执行操作是可选的。因此,基本上,您可以让您的按钮在点击时不执行任何操作。
这三个警报的产生方式相同。
Alert(title: Text("Alert Title"), message: Text("Alert message"), dismissButton: .default(Text("OK")))
Alert(title: Text("Alert Title"), message: Text("Alert message"), dismissButton: .default(Text("OK"), action: nil))
Alert(title: Text("Alert Title"), message: Text("Alert message"), dismissButton: .default(Text("OK"), action: {}))
因为action是可选的,并且其默认值为nil,所以我们可以省略,传递nil或传递空闭包。第一种选择是,如果我不执行操作,该怎么做。
如果我们想要执行一个动作,我们只需将其包含action参数即可。我们可以在传递的闭包中编写所有代码,也可以将其编写为函数。
此警报包含在闭合中点按操作时应运行的代码。如果只运行一行代码,这是可以的,但是如果有多行代码,它可能会开始使视图混乱。
Alert(title: Text("Alert Title"),
message: Text("Alert message"),
dismissButton: .default(Text("OK"), action: { print("Hello")}))
此警报的操作依赖于ContentView中已声明的功能。这意味着一个非常复杂的函数不会使您的视图代码混乱。
struct ContentView: View {
@State private var showAlert: Bool = false
var body: some View {
Button(action: { self.showAlert.toggle() },
label: { Text("Show Alert") })
.alert(isPresented: $showAlert, content: {
Alert(title: Text("Alert Title"),
message: Text("Alert message"),
dismissButton: .default(Text("OK"), action: self.hello))
})
}
func hello() {
print("Hello")
}
}
答案 1 :(得分:0)
虽然有点违反直觉,但您可以将dismissButton
参数用于任何按钮样式,而不仅仅是.cancel()
。
Alert(title: Text("Title"), message: Text("Message"), dismissButton: .default(Text("Run Code"), action: {
// code
}))