【问题标题】:SwiftUI: Sheet cannot show correct values in first timeSwiftUI:工作表第一次无法显示正确的值
【发布时间】:2021-02-24 02:54:44
【问题描述】:

我在 SwiftUI 中发现了奇怪的行为。

当我第一次点击列表列时,工作表显示空白文本。 第二次后似乎正确。

你会帮我吗?

import SwiftUI

let fruits: [String] = [
    "Apple",
    "Banana",
    "Orange",
]

struct ContentView: View {
    @State var isShowintSheet = false
    @State var selected: String = ""
    var body: some View {
        NavigationView {
            List(fruits, id: \.self) { fruit in
                Button(action: {
                    selected = fruit
                    isShowintSheet = true
                }) {
                    Text(fruit)
                }
            }
        }
        .sheet(isPresented: $isShowintSheet, content: {
            Text(selected)
        })
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

list

first tap

after second tap

【问题讨论】:

    标签: ios list swiftui


    【解决方案1】:

    谢谢你,奥米德。

    我像这样使用 @State 从 Asperi 的代码中更改了我的代码。

    import SwiftUI
    
    struct Fruit: Identifiable, Hashable {
        var name: String
        var id = UUID()
    }
    
    let fruits: [Fruit] = [
        Fruit(name: "Apple"),
        Fruit(name: "Banana"),
        Fruit(name: "Orange"),
    ]
    
    struct ContentView: View {
        @State var selected: Fruit?
        var body: some View {
            NavigationView {
                List(fruits, id: \.self) { fruit in
                    Button(action: {
                        selected = fruit
                    }) {
                        Text(fruit.name)
                    }
                }
            }
            .sheet(item: $selected, content: { item in
                Text(item.name)
            })
        }
    }
    

    【讨论】:

    • 还有其他方法,但答案应该尽可能接近提问!我对主题的回答最多
    • @Omid 我不确定这是否属实。您使用的是全局变量和 sheet(isPresented:content:),这对于本示例是错误的(我个人不会接受您的回答)。 Asperi 的解决方案sheet(item:content:) 是正确的。但是 omusubi 创建 Fruit 结构的解决方案甚至更好(并且可能应该被接受)。
    【解决方案2】:

    请改用.sheet(item:)。这是固定代码。

    已通过 Xcode 12.1 / iOS 14.1 验证

    struct ContentView: View {
        @State var selected: String?
        var body: some View {
            NavigationView {
                List(fruits, id: \.self) { fruit in
                    Button(action: {
                        selected = fruit
                    }) {
                        Text(fruit)
                    }
                }
            }
            .sheet(item: $selected, content: { item in
                Text(item)
            })
        }
    }
    
    extension String: Identifiable {
        public var id: String { self }
    }
    

    【讨论】:

    • 很好,它对我有用??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 2022-12-26
    • 1970-01-01
    相关资源
    最近更新 更多