提问人:McHobbes 提问时间:5/21/2023 更新时间:5/21/2023 访问量:53
按下第一个按钮时,我的 SwiftUI App 不会动态填充弹出式视图的内容
My SwiftUI app does not dynamically populate the content of a pop-up View when the first button is pressed
问:
我有一个小图像/图标网格作为按钮和一个弹出式模式视图。模式视图旨在显示作为按钮的图像的较大版本,以及有关它的一些信息。然而,在实践中,按下的第一个按钮只会显示一个空的视图。只有在关闭它并按下其他按钮后,才会填充视图。从那时起,应用程序将按预期工作。我认为这是因为工作表修改器的异步性质,但我似乎无法了解如何在第一次显示模态视图之前填充它。
这是代码的大幅简化版本(带有两个简单的文本按钮),它表现出相同的行为,因此您可以看到我在做什么。
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”。
答:
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 进行扩展以使其“可识别”,但假设这不是使这项工作过于临时/蛮力的方法,那么这效果很好!
评论