首页 > 解决方案 > 检测用户是否在 SwiftUI 中点击了屏幕,包括按钮

问题描述

我一直在尝试使用 .onTapGesture 来检测用户是否点击屏幕。但是,我注意到如果用户点击按钮和选择器等可操作元素,它不会被触发。有没有办法检测用户是否在屏幕上点击,包括这些可操作的元素,而不必viewTapped单独为每个按钮、选择器等手动调用我的函数?

这是我用来测试的代码。

struct ContentView: View {
    @State var mode = 0
        
    var body: some View {
        ZStack {
            VStack {
                Text("Hello, world!")
                    .padding()
                
                Picker(
                    selection: $mode,
                    label: Text("Picker")) {
                    Text("Option 1").tag(0)
                    Text("Option 2").tag(1)
                }
                .pickerStyle(SegmentedPickerStyle())
                .frame(width: 200)
                .foregroundColor(.white)
                .padding()
                
                Button {
                    print("button clicked")
                } label: {
                    Text("Click me")
                }
                .padding()
            }
        }
        .frame(maxWidth: .infinity, maxHeight: .infinity)
        .background(Color.green)
        .onTapGesture {
            viewTapped()
        }
    }
    
    public func viewTapped() {
        print("view tapped")
    }
}

标签: swiftui

解决方案


如果您需要同时检测 touches simultaneity,则需要使用simultaneousGesture修饰符。像:


.simultaneousGesture(
    TapGesture()
        .onEnded {
            viewTapped()
        }
)

推荐阅读