swiftui - 在 SwiftUI 中检测按钮外部的触摸
问题描述
我有一个重置按钮,首先要求确认。我想设置isSure
为 false 是用户在组件之外触摸。
我可以从 Button 组件执行此操作吗?
这是我的按钮:
struct ResetButton: View {
var onConfirmPress: () -> Void;
@State private var isSure: Bool = false;
var body: some View {
Button(action: {
if (self.isSure) {
self.onConfirmPress();
self.isSure.toggle();
} else {
self.isSure.toggle();
}
}) {
Text(self.isSure ? "Are you sure?" : "Reset")
}
}
}
解决方案
这是一种方法:
struct ContentView: View {
var onConfirmPress: () -> Void
@State private var isSure: Bool = false
var body: some View {
GeometryReader { geometry in
ZStack {
// a transparent rectangle under everything
Rectangle()
.frame(width: geometry.size.width, height: geometry.size.height)
.opacity(0.001) // <--- important
.layoutPriority(-1)
.onTapGesture {
self.isSure = false
print("---> onTapGesture self.isSure : \(self.isSure)")
}
Button(action: {
if (self.isSure) {
self.onConfirmPress()
}
self.isSure.toggle()
}) {
Text(self.isSure ? "Are you sure?" : "Reset").padding(10).border(Color.black)
}
}
}
}
}
推荐阅读
- c++ - 如何在 C++ 中使用嵌套模板?
- swiftui - 如何更改 ForEach 结构返回的元素的属性
- android - 有没有办法让每个人都可以访问 firestore 数据库,但只能通过应用程序?
- python - Python 类可下标但不可迭代
- git - emacs 不备份 git repo 中的文件
- recursion - Preorder traversal without recursion
- ansible - 可变模块字段
- json - How to create multiple instance of backendAddressPools, frontendports in Application Gateways through ARM template
- javascript - 制作响应式可折叠导航栏。我很难让 Javascript 在点击时工作
- google-sheets - Is there a way to filter a pivot query to remove the blank column