Alert, 弹出视图, 展示提示/警告信息
我们可以根据布尔值显示Alert。
Button("Alert") {
self.isError = true
}.alert(isPresented: $isError, content: {
Alert(title: Text("Error"), message: Text("Error Reason"), dismissButton: .default(Text("OK")))
})
![](https://img.haomeiwen.com/i6357009/17ac070fb69e3aa0.png)
![](https://img.haomeiwen.com/i6357009/b9468d091f7d6da5.png)
它也可以与 识别项-Identifiable 绑定。
@State var error: AlertError?
var body: some View {
Button("Alert Error") {
self.error = AlertError(reason: "Reason")
}.alert(item: $error, content: { error in
alert(reason: error.reason)
})
}
func alert(reason: String) -> Alert {
Alert(title: Text("Error"),
message: Text(reason),
dismissButton: .default(Text("OK"))
)
}
struct AlertError: Identifiable {
var id: String {
return reason
}
let reason: String
}
![](https://img.haomeiwen.com/i6357009/9322c1b56d8d4964.png)
![](https://img.haomeiwen.com/i6357009/c0aeb3eb519c92e8.png)
Modal, 模态转换/过渡。我们可以根据布尔值显示Modal
。
@State var isModal: Bool = false
var modal: some View {
Text("Modal2")
}
var body: some View {
Button("Modal") {
self.isModal = true
}.sheet(isPresented: $isModal, content: {
self.modal
})
}
![](https://img.haomeiwen.com/i6357009/8fb4f8399f36068c.png)
底部弹出的 sheet视图 modal2, 可以拖动
![](https://img.haomeiwen.com/i6357009/014a98b103f66aa0.png)
Alert 也可以与 Identifiable 项绑定。如上图
@State var detail: ModalDetail?
var body: some View {
Button("Modal") {
self.detail = ModalDetail(body: "Detail")
}.sheet(item: $detail, content: { detail in
self.modal(detail: detail.body)
})
}
func modal(detail: String) -> some View {
Text(detail)
}
struct ModalDetail: Identifiable {
var id: String {
return body
}
let body: String
}
代码错误 ---- 如果您想要完整呈现模态视图的旧式模态呈现屏幕,您可以使用 .fullScreenCover 代替 .sheet。
由于全屏封面样式不允许用户使用手势来关闭 modal,您必须添加一种手动关闭呈现视图的方法。 在里面下面的例子,我们添加一个按钮来通过 set 关闭呈现的视图isModal 为假。
@State var isModal: Bool = false
var modal: some View {
Text("Modal")
Button("Dismiss") {
self.isModal = false
}
}
Button("Fullscreen") {
self.isModal = true
}.fullScreenCover(isPresented: $isFullscreen, content: {
self.modal
})
如果您使用自定义视图作为模式,您可以使用presentationMode 环境键。
struct Modal: View {
@Environment(\.presentationMode) var presentationMode
var body: some View {
Text("Modal")
Button("Dismiss Modal") {
presentationMode.wrappedValue.dismiss()
}
}
}
struct ContentView: View {
@State private var isModal = false
var body: some View {
Button("Fullscreen") {
isModal = true
}
.fullScreenCover(isPresented: $isFullscreen, content: {
Modal()
})
}
ActionSheet, 操作表演示的存储类型。我们可以根据布尔值显示ActionSheet。
@State var isSheet: Bool = false
var actionSheet: ActionSheet {
ActionSheet(title: Text("Action"),
message: Text("Description"),
buttons: [
.default(Text("OK"), action: {
}),
.destructive(Text("Delete"), action: {
})
]
)
}
var body: some View {
Button("Action Sheet") {
self.isSheet = true
}.actionSheet(isPresented: $isSheet, content: {
self.actionSheet
})
![](https://img.haomeiwen.com/i6357009/711a7dba00bd19f3.png)
它也可以与 Identifiable 项绑定。
@State var sheetDetail: SheetDetail?
var body: some View {
Button("Action Sheet") {
self.sheetDetail = ModSheetDetail(body: "Detail")
}.actionSheet(item: $sheetDetail, content: { detail in
self.sheet(detail: detail.body)
})
}
func sheet(detail: String) -> ActionSheet {
ActionSheet(title: Text("Action"),
message: Text(detail),
buttons: [
.default(Text("OK"), action: {
}),
.destructive(Text("Delete"), action: {
})
]
)
}
struct SheetDetail: Identifiable {
var id: String {
return body
}
let body: String
}
![](https://img.haomeiwen.com/i6357009/56f4d8f3fdf0f24a.png)
网友评论