SwiftUI Dynamické Zberači v Podobe crash

0

Otázka

Som začiatočník SwiftUI developer, a mám problémy s vytvorením názor, že dynamicky predstavuje rôzne zberačov, ktoré je založené na používateľa predchádzajúce výber v tomto zobrazení. Ak chcete vidieť problém, spustite nasledujúci kód v Simulátore, zmeniť pickerOneSelection na "Výber Tri", potom znova zmeniť na "Picker Dvoch" a pokúsiť sa zmeniť pickerTwoSelection. Aplikácia sa ihneď havárie; konkrétne chybové s týmto hračka príkladom je "Závit 1: EXC_BAD_ACCESS (kód=1, address=0x8)". Akýkoľvek pohľad je väčšina, vitajte!

Len tak bokom, díval som sa na tieto otázky: (SwiftUI hierarchickej Výber dynamické údaje pády) a (swiftUi : 2 Zberači na jednej obrazovke - app zrážke s "Index out of range"), ale ak je to možné, rád by som, aby sa zabránilo prevod môj reťazec výber premenných (pickerOneSelection, pickerThreeSelection) do čísla, ktoré musí byť preložená do reťazcov získať text spojené s užívateľa výber. Ak to nie je možné, aby to, čo sa snažím urobiť bez toho, index premenných, ak by ste mi mohol pomôcť pochopiť, prečo sa, že by bolo veľmi užitočné.

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

Vďaka za vašu pomoc a skúsenosti!

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

Najlepšiu odpoveď

1

Kľúčový problém je, že môžete skryť picker, tak to je najlepšie nastaviť jeho transparentnosť 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

Ďakujem za tento návrh. Bohužiaľ, to sa nezobrazí vyriešiť problém. Po pridaní tento kód na Výber Dve, aplikácia stále pády, ak zmením na Výber Jeden tip na displeji na Výber Tri, potom sa zmeniť Picker Jeden tip späť na Výber Dve a pokus o zmenu na Výber Dve výber. Je tam aj niečo iné, čo mám robiť inde v mojom kóde, aby sa toto riešenie funguje?
ej5607

V iných jazykoch

Táto stránka je v iných jazykoch

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