swiftui - 检测用户是否在 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")
}
}
解决方案
如果您需要同时检测 touches simultaneity,则需要使用simultaneousGesture
修饰符。像:
.simultaneousGesture(
TapGesture()
.onEnded {
viewTapped()
}
)
推荐阅读
- ionic-framework - 如何解决:无法确定类 OverlayPortal 的模块
- python - 使用 2D 输入训练 Sci-kit Learn 神经网络
- knockout.js - 使用身份验证令牌从安全服务器加载 requirejs 模块
- apache - Apache CXF Swagger UI JSON 文件不显示任何内容
- string - 切片包含 Unicode 字符的字符串
- android - 使用 mvvm 实现启动画面时出现此错误
- android - JobScheduler Android Oreo 问题
- django - 在 django forms.py 中获取 URL pk
- mysql - MySQL / MariaDB:如何在基于时间的数据中找到差距?
- ios - 为 coremlmodel 塑造输入