按下第一个按钮时,我的 SwiftUI App 不会动态填充弹出式视图的内容

My SwiftUI app does not dynamically populate the content of a pop-up View when the first button is pressed

提问人:McHobbes 提问时间:5/21/2023 更新时间:5/21/2023 访问量:53

问:

我有一个小图像/图标网格作为按钮和一个弹出式模式视图。模式视图旨在显示作为按钮的图像的较大版本,以及有关它的一些信息。然而,在实践中,按下的第一个按钮只会显示一个空的视图。只有在关闭它并按下其他按钮后,才会填充视图。从那时起,应用程序将按预期工作。我认为这是因为工作表修改器的异步性质,但我似乎无法了解如何在第一次显示模态视图之前填充它。

这是代码的大幅简化版本(带有两个简单的文本按钮),它表现出相同的行为,因此您可以看到我在做什么。

import SwiftUI

struct ContentView: View {
    @State private var showModal = false
    @State private var selectedItem = ""
    
    var body: some View {
        VStack {
            Button(action: {
                self.selectedItem = "Button 1"
                self.showModal = true
            }) {
                Text("Button 1")
            }
            Button(action: {
                self.selectedItem = "Button 2"
                self.showModal = true
            }) {
                Text("Button 2")
            }
        }
        .sheet(isPresented: $showModal, content: {
            ModalView(item: self.selectedItem)
        })
    }
}

struct ModalView: View {
    let item: String
    
    var body: some View {
        VStack {
            Text("You pushed \(item)")
        }
    }
}

在这种情况下,如果我点击“按钮 1”,它只会打开一个视图,上面写着“你推了”。如果我关闭该模式并再次点击它,也会发生同样的事情。只有当我点击“按钮 2”时,模态视图才会弹出并说“您按下了按钮 2”,之后,当我点击“按钮 1”时,它也会显示“您按下了按钮 1”。

iOS 异步 swiftui swiftui-sheet

评论


答:

1赞 workingdog support Ukraine 5/21/2023 #1

尝试使用

@State private var selectedItem: String? 

.sheet(item: $selectedItem){ item in 
     ModalView(item: item)
 } 

相反。无需showModal

评论

0赞 McHobbes 5/21/2023
嗯,这几乎是滑稽的简单。谢谢!为了做到这一点,我确实必须对 String 进行扩展以使其“可识别”,但假设这不是使这项工作过于临时/蛮力的方法,那么这效果很好!