Ric*_*hiy 7 alert ios swift swiftui
UIKit 中的类似问题:How to dismiss UIAlertController when tap Outside the UIAlertController?
我有一个带有几个按钮的基本警报(取消/删除样式)。我想通过点击警报外部来“关闭”警报,类似于“取消”按钮的操作:
struct ContentView: View {
@State private var showingAlert = false
var body: some View {
Button("Show Alert") {
showingAlert = true
}
.alert("Important message", isPresented: $showingAlert) {
Button("First") { }
Button("Second") { }
Button("Third") { }
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试添加onTapGesture处理程序,但没有帮助。
小智 2
我不确定警报是否是您想要实现的目标的正确选择。警报并不打算按照您所描述的方式使用,并且通过点击外部来消除警报会给 iOS 上的用户体验带来尴尬,并且苹果不鼓励这样做。SwiftUI 旨在用于多个苹果平台,例如 AppleWatch 或 AppleTV,在这些平台上您无法简单地点击警报之外的地方。因此,SwiftUI 中没有实现您所描述的此类机制。
\n更好的方法是创建您自己的视图并使用ZStack. 然后,您可以onTapGesture在任何可单击区域上使用修饰符来关闭视图。\n请查看示例以获取简化示例。
struct ContentView: View {\n @State private var showingAlert = false\n\n var body: some View {\n ZStack {\n // green area is clickable\n VStack {\n Spacer()\n HStack {\n Spacer()\n Button("Show Alert") {\n showingAlert = true\n }\n Spacer()\n }\n \n Spacer()\n }\n .background(.green)\n .onTapGesture {\n self.showingAlert = false\n }\n \n if(showingAlert) {\n // your overlay to be designed by you. \n VStack\xc2\xa0{\n Text("alert")\n }\n .frame(width: 100, height: 100, alignment: .center)\n .background(.gray)\n }\n }\n \n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2800 次 |
| 最近记录: |