在SwiftUI中检测触摸外部按钮

在SwiftUI中检测触摸外部按钮,swiftui,Swiftui,我有一个重置按钮,要求首先确认。如果用户触摸组件外部,我想将isSure设置为false 我可以从按钮组件执行此操作吗 这是我的按钮: struct ResetButton: View { var onConfirmPress: () -> Void; @State private var isSure: Bool = false; var body: some View { Button(action: { if (sel

我有一个重置按钮,要求首先确认。如果用户触摸组件外部,我想将
isSure
设置为false

我可以从按钮组件执行此操作吗

这是我的按钮:

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)
            }
        }
    }
}
}
struct ContentView:View{
变量onConfirmPress:()->Void
@国家私有风险值问题:Bool=false
var body:一些观点{
GeometryReader{中的几何体
ZStack{
//所有东西下面都是一个透明的长方形
矩形()
.框架(宽度:几何体.尺寸.宽度,高度:几何体.尺寸.高度)

.opacity(0.001)/这里有一种方法:

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)
            }
        }
    }
}
}
struct ContentView:View{
变量onConfirmPress:()->Void
@国家私有风险值问题:Bool=false
var body:一些观点{
GeometryReader{中的几何体
ZStack{
//所有东西下面都是一个透明的长方形
矩形()
.框架(宽度:几何体.尺寸.宽度,高度:几何体.尺寸.高度)
.不透明度(0.001)//