只需一个操作按钮即可创建警报
Create an Alert with just one action button
我想要一个 Alert
带有一个运行一些代码的按钮。我不希望有一个取消按钮。我只见过有两个按钮的方法,primaryButton
和 secondaryButton
。有没有办法做这样的事情?
虽然有点违反直觉,但您可以将 dismissButton
参数用于任何按钮样式,而不仅仅是 .cancel()
。
Alert(title: Text("Title"), message: Text("Message"), dismissButton: .default(Text("Run Code"), action: {
// code
}))
在 SwiftUI 中创建警报时,documentation 是查看可用内容的好地方。
在创建警报部分,我们看到以下内容:
init(title: Text, message: Text?, primaryButton: Alert.Button, secondaryButton: Alert.Button)
Creates an alert with two buttons.
init(title: Text, message: Text?, dismissButton: Alert.Button?)
Creates an alert with one button.
如文档所述,要使用一个按钮创建警报,您可以选择第二个选项。
您可以在警报中使用四种不同的按钮类型,see here。
static func cancel((() -> Void)?) -> Alert.Button
An alert button that indicates cancellation.
static func cancel(Text, action: (() -> Void)?) -> Alert.Button
Creates an Alert.Button that indicates cancellation of some operation.
static func default(Text, action: (() -> Void)?) -> Alert.Button
Creates an Alert.Button with the default style.
static func destructive(Text, action: (() -> Void)?) -> Alert.Button
Creates an Alert.Button with a style indicating destruction of some
data.
因此,根据您希望按钮执行的操作,有很多选项可供选择。请注意,对按钮执行操作是可选的。所以基本上你可以让你的按钮在点击时做某事或什么都不做。
无操作的警报
这三个警报产生的内容相同。
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,或者我们可以传递一个空的闭包。如果我不执行操作,第一个选项是我会选择的选项。
带有操作的警报
如果我们想要执行一个动作,我们只需要将它包含在动作参数中。我们可以将所有代码都写在我们传递的闭包中,也可以将它写成一个函数。
此警报的代码应该是 运行 当点击包含在闭包中的操作时。如果您只有一行代码到 运行,这没问题,但如果您有多行代码,它可能会开始使您的视图变得混乱。
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")
}
}
我想要一个 Alert
带有一个运行一些代码的按钮。我不希望有一个取消按钮。我只见过有两个按钮的方法,primaryButton
和 secondaryButton
。有没有办法做这样的事情?
虽然有点违反直觉,但您可以将 dismissButton
参数用于任何按钮样式,而不仅仅是 .cancel()
。
Alert(title: Text("Title"), message: Text("Message"), dismissButton: .default(Text("Run Code"), action: {
// code
}))
在 SwiftUI 中创建警报时,documentation 是查看可用内容的好地方。
在创建警报部分,我们看到以下内容:
init(title: Text, message: Text?, primaryButton: Alert.Button, secondaryButton: Alert.Button)
Creates an alert with two buttons.
init(title: Text, message: Text?, dismissButton: Alert.Button?)
Creates an alert with one button.
如文档所述,要使用一个按钮创建警报,您可以选择第二个选项。
您可以在警报中使用四种不同的按钮类型,see here。
static func cancel((() -> Void)?) -> Alert.Button
An alert button that indicates cancellation.
static func cancel(Text, action: (() -> Void)?) -> Alert.Button
Creates an Alert.Button that indicates cancellation of some operation.
static func default(Text, action: (() -> Void)?) -> Alert.Button
Creates an Alert.Button with the default style.
static func destructive(Text, action: (() -> Void)?) -> Alert.Button
Creates an Alert.Button with a style indicating destruction of some data.
因此,根据您希望按钮执行的操作,有很多选项可供选择。请注意,对按钮执行操作是可选的。所以基本上你可以让你的按钮在点击时做某事或什么都不做。
无操作的警报
这三个警报产生的内容相同。
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,或者我们可以传递一个空的闭包。如果我不执行操作,第一个选项是我会选择的选项。
带有操作的警报
如果我们想要执行一个动作,我们只需要将它包含在动作参数中。我们可以将所有代码都写在我们传递的闭包中,也可以将它写成一个函数。
此警报的代码应该是 运行 当点击包含在闭包中的操作时。如果您只有一行代码到 运行,这没问题,但如果您有多行代码,它可能会开始使您的视图变得混乱。
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")
}
}