相关疑难解决方法(0)

@State var 未按 LazyVGrid 中的预期更新

我无法理解为什么我的变量“selectedItem”在此代码的一部分中更新,而不是在另一部分中更新。我的目标是做到这一点,以便当您点击网格中的图像时,它将所选图像名称传递给 ImageDetailView (理想情况下我希望它是一个导航链接,但一张表对我来说更容易测试..一步一步)。

在我有的地方,print(selectedItem)它会按预期在控制台中打印 LazyVGrid 的点击图像的名称。惊人的。

但随后打开的工作表是空白的,因为它仍在寻找“测试”...控制台显示一条消息“在资产目录中找不到名为“测试”的图像...”

为什么工作表仍然使用“test”的初始化值?而不是更新后的值?

结构ImagesView:视图{

@State var gridLayout: [GridItem] = [ GridItem() ]
var title: String
var imageSet = [Photo]()
@State private var selectedItem = "test"

var body: some View {
    ZStack {
        Color.black.edgesIgnoringSafeArea(.all)
        GeometryReader {  reader in
            ScrollView {
                LazyVGrid(columns: gridLayout, alignment: .center, spacing: 10) {
                    ForEach(imageSet.indices) { index in
                        Image(imageSet[index].name)
                            .resizable()
                            .onTapGesture {
                                showImageDetailView = true
                                selectedItem = imageSet[index].name
                                print(selectedItem)                                  
                            }                              
                            )}
                        .padding(.horizontal, 10)
                        .padding(.bottom, 25)
                    
                }
                .sheet(isPresented: $showImageDetailView, content: {
                    ImageDetailView(selectedItem: …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui ios14

3
推荐指数
1
解决办法
943
查看次数

SwiftUI:在枚举上切换 .sheet,不起作用

我有两个 Modal/Popover.sheet我想根据用户按下哪个按钮来显示。我已经设置enum了不同的选项并设置了默认选项。

预期行为:

当用户选择任何选项时,将显示正确的工作表。当用户 THEN 选择其他选项时,它还会显示正确的工作表。

观察到的行为:

在下面的例子中,当用户第一次选择第二个选项时,显示第一个工作表,并将继续显示直到用户选择第一个工作表,然后它会开始切换。

调试打印显示@State变量正在更改,但是,工作表演示不会观察到此更改并按上述方式显示工作表。有什么想法吗?

import SwiftUI


//MARK: main view:
struct ContentView: View {
    
    //construct enum to decide which sheet to present:
    enum ActiveSheet {
        case sheetA, sheetB
    }
    
    //setup needed vars and set default sheet to show:
    @State var activeSheet = ActiveSheet.sheetA //sets default sheet to Sheet A
    @State var showSheet = false
    
    
    var body: some View {
        
        
        VStack{
            
            Button(action: {
                self.activeSheet = .sheetA //set choice to …
Run Code Online (Sandbox Code Playgroud)

swiftui

1
推荐指数
1
解决办法
300
查看次数

标签 统计

swiftui ×2

ios ×1

ios14 ×1

swift ×1