繁体   English   中英

SwiftUI 选择器在选择新行时不更新数据

[英]SwiftUI Picker doesn't update data when selecting a new row

SwiftUI 选择器在选择新行时不会更新数据。 我试图通过 Binding 传递数据,但它似乎不起作用。 当我删除绑定逻辑时,一切正常。

ContentView.swift

import SwiftUI

struct ContentView: View {
    
    var colors = ["Red", "Green", "Blue", "Tartan"]

    @State private var showPicker: Bool = false
    @Binding var selectedColor: String
    
    var body: some View {
        
        PanelView(showPicker: .constant(false))
        
            VStack {
                Picker("Please choose a color", selection: $selectedColor) {
                    ForEach(colors, id: \.self) {
                        Text($0)
                    }
                }
            }
        
    }
}

PanelView.swift

import SwiftUI

struct PanelView: View {

    @Binding var showPicker: Bool
    @State private var selectedColor = "Red"
    
    var body: some View {
        HStack(spacing: 10) {
            Text("You selected: \(selectedColor)")
        }
    }
}

对不起我的英语,希望有人可以看看这个问题。

.constant是一个死胡同,不要在任何地方使用它,而是在“ Previews ”部分模拟事实来源。

@State是事实的来源,它没有父级。

@Binding是双向连接。 它没有保存价值的能力。

import SwiftUI

struct ContentView: View {
    
    var colors = ["Red", "Green", "Blue", "Tartan"]

    @State private var showPicker: Bool = false
    @State private var selectedColor: String = "Red"
    
    var body: some View {
        
        PanelView(showPicker: $showPicker, selectedColor: $selectedColor)
        
            VStack {
                Picker("Please choose a color", selection: $selectedColor) {
                    ForEach(colors, id: \.self) {
                        Text($0)
                    }
                }
            }
        
    }
}

struct PanelView: View {

    @Binding var showPicker: Bool
    @Binding var selectedColor : String
    
    var body: some View {
        HStack(spacing: 10) {
            Text("You selected: \(selectedColor)")
        }
    }
}

试试Apple SwiftUI 教程,所有这些都是非常基本的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM