SwiftUI Dinamica Raccoglitori in Forma di crash

0

Domanda

Sono un novizio SwiftUI sviluppatore, e sto avendo problemi a creare una vista che dinamicamente si presenta selettori diversi, basato su un precedente dell'utente di selezione in vista. Per vedere il problema, eseguire il codice riportato di seguito nel Simulatore, modificare il pickerOneSelection di "Selettore a Tre", poi cambiare di nuovo a "Selettore Due" e il tentativo di cambiare il pickerTwoSelection. L'applicazione sarà immediatamente in crash; l'errore specifico con questo giocattolo esempio è "Filettatura 1: EXC_BAD_ACCESS (codice=1, address=0 x 8)". Ogni intuizione è la maggior parte del benvenuto!

Come un a parte, ho guardato a queste domande: (SwiftUI gerarchica Selettore dinamica di dati si blocca) e (swiftUi : 2 Raccoglitori su uno schermo - app crash con "Index out of range"), ma, se possibile, vorrei evitare di convertire la stringa di selezione di variabili (pickerOneSelection, pickerThreeSelection) in numeri interi, che deve poi essere tradotti in stringhe per ottenere il testo associato con la selezione dell'utente. Se non è possibile fare ciò che sto cercando di fare a meno dell'indice di variabili, se si mi potrebbe aiutare a capire perché, che sarebbe molto utile.

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

Molte grazie per il vostro aiuto e la competenza!

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

Migliore risposta

1

La chiave del problema è che si nasconde la selezione, quindi è meglio impostare la trasparenza di 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

Grazie per questo suggerimento. Purtroppo, non sembra risolvere il problema. Dopo l'aggiunta di questo codice per la Selezione di Due, l'app si blocca ancora se posso cambiare il Selettore di Una selezione per visualizzare il Selettore a Tre, quindi modificare la Selezione di Una selezione per la Selezione di Due e si tenta di cambiare il Selettore Due di selezione. C'è qualcos'altro che devo fare altrove nel mio codice per fare questo lavoro la soluzione?
ej5607

In altre lingue

Questa pagina è in altre lingue

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