SwiftUI ปรับอัตโนมัติ Pickers ในรูปแบบตก

0

คำถาม

ฉันเป็นสำหรับค SwiftUI ผู้พัฒนา,และฉันมีปัญหาเรื่องการสร้างมุมมองที่ dynamically ของขวัญแตกต่าง pickers โดยอิงค่าพื้นฐานจากเป็นของผู้ใช้ก่อนหน้าส่วนที่เลือกในมุมมอง เพื่อเห็นปัญหาของวิ่งต่อไปนี้ดรหัสใน simulator กับเขาเปลี่ยนค pickerOneSelection ต้อง"Picker สาม"แล้วเปลี่ยนแปลงมันกลับไป"Picker สองคน"และพยายามเปลี่ยนค pickerTwoSelection. แอพฯจะทันทีตองกาเจาะจงเกิดข้อผิดพลาดกับเรื่องนี้ของเล่นตัวอย่างเช่นคือ"เธรด 1:EXC_BAD_ACCESS(รหัส=1,ที่อยู่ของ=0x8)". มีใครติดต่อกลับมาเลยหรืคือส่วนใหญ่ยินดีต้อนรั!

เป็นข้ลังจากเรื่องที่ผ่านมาฉันต้องมองพวกนี้ถามคำถาม:(SwiftUI ลำดับชั้นการสืบทอด Picker กับแมสซีฟไดนามิข้อมูลของข้อขัดข้องต่างๆ)และ(swiftUi:2 Pickers บหนึ่งจอภาพ-โปรแกรมเกี่ยวพันกับ"ดัชนีออกนอกระยะทาง")แต่หากเป็นไปได้ฉันอยากจะหลีกเลี่ยงการเปลี่ยนข้อความของฉันการเลือกตัวแปร(pickerOneSelection,pickerThreeSelection)ใน integers ซึ่งต้องแล้วแปลขภาษาองกลับไปใช้เส้นสายเพื่อให้ข้อความที่เกี่ยวข้องกับผู้ใช้การเลือก. ถ้ามันเป็นไปไม่ได้ที่จะทำในสิ่งที่ฉันพยายามจะทำยังไงถ้าไม่มีดัชนีขอตัวแปรอถ้าคุณช่วยฉันเข้าใจว่าทำไมมันคงจะช่วยได้มากทีเดียว

import SwiftUI

struct ContentView: View {
    @State var pickerOneSelection: String = "Picker Two"
    @State var pickerTwoVisible: Bool = false
    @State var pickerTwoSelection: Int = 3
    @State var pickerThreeSelection: String = "Option 1"
    
    var pickerOneOptions = ["Picker Two", "Picker Three"]
    var pickerThreeOptions = ["Option 1", "Option 2", "Option 3"]
    
    var body: some View {
        NavigationView {
            Form {
                Picker("Picker One selection", selection: $pickerOneSelection) {
                    ForEach(pickerOneOptions, id: \.self) {
                        Text($0)
                    }
                } // End of Picker 1
                
                if pickerOneSelection == "Picker Two" {
                    HStack {
                        Text("Picker Two selection")
                        Spacer()
                        Button(String(pickerTwoSelection)) {
                            self.pickerTwoVisible.toggle()
                        }
                    } // End of HStack
                    
                    if pickerTwoVisible {
                        Picker("Picker Two", selection: $pickerTwoSelection) {
                            ForEach(0..<32, id: \.self) {
                                Text(String($0))
                            }
                        }
                        .pickerStyle(WheelPickerStyle())
                    } // End of pickerTwoVisible
                    
                } else {
                    
                    Picker("Picker Three selection", selection: $pickerThreeSelection) {
                        ForEach(pickerThreeOptions, id: \.self) {
                            Text($0)
                        }
                    } // End of Picker 3
                    
                }
            } // End of Form
        } // End of NavigationView
    } // End of body
} // End of ContentView

หลายขอบคุณสำหรับความช่วยเหลือของคุณและความเชี่ยวชาญด้าน!

picker swiftui xcode
2021-11-23 13:46:55
1

คำตอบที่ดีที่สุด

1

กุญแจสำคัญปัญหาก็คือการที่คุณซ่อน picker ดังนั้นมันเป็นสิ่งที่ดีที่สุดเพื่อใช้ตั้งค่าของมัความโปร่งแสงล่องห 0

Picker("Picker Two", selection: $pickerTwoSelection) {
                            ForEach(1..<32, id: \.self) {
                                Text(String($0))
                            }
                        }
                        .pickerStyle(WheelPickerStyle())
                        .opacity(pickerTwoVisible ? 1 : 0)
                        .frame(width: pickerTwoVisible ? nil : 0, height: pickerTwoVisible ? nil : 0)
2021-11-23 14:25:11

ขอบคุณสำหรับคำแนะนำ โชคร้ายที่มันไม่ปรากฎเพื่อช่วยแก้ปัญหาใดๆหรอกครับ หลังจากการเพิ่มนี่รหัส Picker งสองแอพฯยังคงทำงานขัดข้องถ้าฉันเปลี่ยน Picker หนึ่งส่วนที่เลือกเพื่อให้มีการแสด Picker สามแล้วก็เปลี่ยน Picker หนึ่งส่วนที่เลือกกลับไป Picker สองและพยายามเปลี่ยนค Picker สองส่วนที่เลือก. มีบางอย่างอื่นที่ฉันต้องทำที่อื่นกันอยู่ในรหัสต้องทำให้มันหาทางทำงาน?
ej5607

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................