ios - 您如何找出在 SwiftUI 中点击了哪个视图?
问题描述
所以如果我在 SwiftUI 中做一个轻击手势识别器,像这样......
@State var tapped = false
var tap: some Gesture {
TapGesture(count: 1)
.onEnded {
_ in self.tapped = !self.tapped
print("tapped!")
}
}
...然后将此点击手势识别器添加到列表中以编程方式创建的视图中,就像这样...
List {
// loop through all the posts and create a post view for each item
ForEach(posts) { post in
PostView(post: post)
.gesture(self.tap)
}
}
...这行得通,水龙头确实注册了,但我不知道如何确定哪个视图被点击,以便我可以使用水龙头来更新变量或调用关联视图的函数。
解决方案
您可以使用存储此处所示的@State
属性找到正在点击的帖子。并像我对背景所做selectedPost
的那样更新。View
struct ContentView: View {
var posts: [Post] = []
@State private var selectedPost: Post?
@State private var tapped = false
var body: some View {
List {
ForEach(posts) { post in
PostView(post: post)
.background(post == selectedPost ? Color.clear : Color.green)
.onTapGesture {
self.selectedPost = post
self.tapped.toggle()
}
}
}
}
}
推荐阅读
- python - Python 3 + Mysql:不正确的字符串值'\xF0\x9F\x85\x97\xF0\x9F...'
- postgresql - 如何列出给定数据库模式名称的所有表的 MAX(id)?
- jquery - 我在进行 ajax 调用时传递的一个参数中有一个“&”
- javascript - 使用纯 JavaScript 进行简单的拖放
- mysql - 如何在 docker-compose.yml 中使用多行命令标志配置 MySQL 实例
- excel - 有没有办法使用excel vba比较两个不同的数据集
- mysql - 可以使用 django mysql 模型数组字段
- c# - 从 C# Web 服务启动 Windows Server 上的用户程序
- c# - 如何在 IHTMLELEMENT 控件上执行平滑滚动
- vb.net - 如何将结构加载到数组/对象/类中?