SwiftUi 工作表在第一次点击时是空白的,但之后可以正常工作

问题描述 投票:0回答:3

我有一张表放在 foreach 循环之外。当我第一次单击 Tapgesture 时,结果为空白,第一次之后我点击的每一行都获得了正确的数据。我已阅读 ForEach 内的工作表不会循环遍历项目 SwiftUI 但它仍然无法正常工作,这是我的代码。如果您查看我的代码,我有一个名为 sharePost 的状态变量,点击它即可获取 value.post 的值,然后 shareSheet 切换设置为 true 。由于某种原因,我无法在第一次点击时获取该值。有人对解决这个问题有什么建议吗

struct TimeLineView: View {
    @Binding var model: [MainModel]
    @Binding var isMainView: MainViewEnum
    @State var shareSheet = false
    @State var PostIDState = 0
    @State var sharePost = ""

var body: some View {
        ZStack
        {

         let result = model.sorted {
                        $0.id! > $1.id!
                    }
                    
                    ForEach(result) { value in
                   HStack {
                            Image("share")
                              .resizable()
                              .frame(width: 28, height: 28)
                              .onTapGesture {
                                            sharePost = value.post
                                            shareSheet.toggle()
                     
                                             }

                        }
                    }

                 }.sheet(isPresented: $shareSheet) 
                  {
                     ShareView(message:"\(sharePost)" )
                  }
             }

        }
swift swiftui swiftui-ontapgesture
3个回答
10
投票

要解决此问题,一种解决方案是通过以下方式实现工作表修改器:

.sheet(isPresented: Binding(
                get: { shareSheet },
                set: { shareSheet = $0 }
            )) {
                ShareView(message:"\(sharePost)" )
            }

7
投票

显然,解决此问题的方法之一是使用

StateObject
而不是
State
这里有一篇 Medium 文章演示了解决方案


0
投票

斯威夫特5

当您需要呈现包含来自自定义数据源的内容的模式视图时,请使用此视图修饰符。

.sheet(item: $sharePost, content: { sharePost in
       ShareView(message:"\(sharePost)" )
})
© www.soinside.com 2019 - 2024. All rights reserved.