Getting confirmation for an action
confirmationDialog(_:isPresented:titleVisibility:actions:)
当给定条件为真时显示确认对话框,使用字符串变量作为标题。
swift
func confirmationDialog<S, A>(
_ title: S,
isPresented: Binding<Bool>,
titleVisibility: Visibility = .automatic,
@ViewBuilder actions: () -> A
) -> some View where S : StringProtocol, A : View在下面的示例中,按钮根据绑定布尔变量的值有条件地显示确认对话框。
当布尔值设置为 true 时,系统将显示一个确认对话框,其中包含取消操作和破坏性操作。
swift
struct ConfirmEraseItems: View {
@State private var isShowingDialog = false
var title: String
var body: some View {
Button("Empty Trash") {
isShowingDialog = true
}
.confirmationDialog(
title,
isPresented: $isShowingDialog
) {
Button("Empty Trash", role: .destructive) {
// Handle empty trash action.
}
Button("Cancel", role: .cancel) {
isShowingDialog = false
}
}
}
}
#Preview {
ConfirmEraseItems(title: "标题")
}确认对话框中的所有操作都将在操作运行后关闭该对话框,默认按钮将以更加突出的方式显示。
- 你可以通过为默认按钮分配
defaultAction键盘快捷键来影响默认按钮。 - 系统可以根据按钮的角色和重要性对按钮重新排序。
- 默认情况下,对话框包含标准关闭操作。
如果你提供一个具有取消角色的按钮,则该按钮将取代默认的关闭操作。你不必通过取消按钮操作来关闭演示文稿。
提示
在 iOS 的常规大小类别中,系统将确认对话框呈现为弹出窗口,用户可以通过点击弹出窗口之外的任何位置来关闭该对话框,而不是显示标准的关闭操作。
confirmationDialog(_:isPresented:titleVisibility:presenting:actions:)
呈现一个确认对话框,使用数据生成对话框的内容和标题的文本视图。
swift
func confirmationDialog<A, T>(
_ title: Text,
isPresented: Binding<Bool>,
titleVisibility: Visibility = .automatic,
presenting data: T?,
@ViewBuilder actions: (T) -> A
) -> some View where A : View- 为了让界面出现,
isPresented必须为true,并且data不能为nil。 presention发生后数据不应更改,演示发生后发生的任何更改都将被忽略。
当你需要使用数据源中的内容填充确认对话框的字段时,可以使用此方法。
下面的示例显示了一个自定义数据源 FileDetails,它提供数据来填充对话框:
swift
import SwiftUI
import UniformTypeIdentifiers
struct FileDetails: Identifiable {
var id: String { name }
let name: String
let fileType: UTType
}
struct ConfirmFileImport: View {
@State private var isConfirming = false
@State private var dialogDetail: FileDetails?
var body: some View {
Button("Import File") {
dialogDetail = FileDetails(
name: "MyImageFile.png", fileType: .png)
isConfirming = true
}
.confirmationDialog(
Text("Import New File?"),
isPresented: $isConfirming, presenting: dialogDetail
) { detail in
Button {
// Handle import action.
} label: {
Text("""
Import \(detail.name)
File Type: \(detail.fileType.description)
""")
}
Button("Cancel", role: .cancel) {
dialogDetail = nil
}
}
}
}注意
在 iOS、tvOS 和 watchOS 上,确认对话框仅支持带有文本标签的控件。 传递任何其他类型的视图都会导致内容被省略。