首页 > 解决方案 > 您如何找出在 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)

                }
            }

...这行得通,水龙头确实注册了,但我不知道如何确定哪个视图被点击,以便我可以使用水龙头来更新变量或调用关联视图的函数。

标签: iosswiftswiftui

解决方案


您可以使用存储此处所示的@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()
          }
      }
    }
  }
}

推荐阅读