मैं टैग की भूमिका को लेकर उलझन में हूं। जब मैं टैग हटाता हूं, तो मैं केवल "एम" चुन सकता हूं, और जोड़ सकता हूं, मैं सभी विकल्प चुन सकता हूं।

जब मैंने इंटीजर सरणी पिकर बनाया, तो टैग की उपस्थिति कोई फर्क नहीं पड़ता।

लेकिन समस्या स्ट्रिंग सरणी में होती है। और मैं जानना चाहता हूं कि ऐसा क्यों होता है।

import SwiftUI

struct InitGender: View {
    @ObservedObject var initData : InitData
    @ObservedObject var initViewRouter : InitViewRouter
    let genderRange = ["M","F"]
    
    var body: some View {
        VStack {
            Text("Select your gender")
                .font(.title)
                .bold()
            
            Picker("Select gender", selection : $initData.gender) {
                ForEach(0..<genderRange.count) {
                    Text(self.genderRange[$0]).tag(self.genderRange[$0])
                }
            }
            .labelsHidden()
            .clipped()
        }
    }    
}
3
Jiwon Lee 9 अगस्त 2020, 08:35

1 उत्तर

सबसे बढ़िया उत्तर

इस प्रकार के चयन के लिए SwiftUI Picker tag या id द्वारा चयन का पता लगाता है और tag (या id) समान होना चाहिए।

यहाँ एक डेमो है (Xcode 12 / iOS 14 के साथ परीक्षण किया गया)

struct InitGender: View {
    @State private var selection: String = "M"
    let genderRange = ["M","F"]

    var body: some View {
        VStack {
            Text("Select your gender")
                .font(.title)
                .bold()
            Text("Selected: \(selection)")

            Picker("Select gender", selection : $selection) {
                ForEach(0..<genderRange.count) {
                    Text(self.genderRange[$0]).tag(self.genderRange[$0])
                }
            }
            .labelsHidden()
            .clipped()
       }
   }
}

Picker का वैकल्पिक कार्यशील संस्करण

Picker("Select gender", selection : $selection) {
    ForEach(genderRange, id: \.self) {
        Text($0)
    }
}
5
Asperi 9 अगस्त 2020, 06:07