我是一名 SwiftUI 開發新手,我無法創建一個視圖,該視圖根據用戶在該視圖中的先前選擇動態呈現不同的選擇器。要查看問題,請在模擬器中運行以下代碼,將pickerOneSelection 更改為“Picker Three”,然后將其更改為“Picker Two”并嘗試更改pickerTwoSelection。該應用程式將立即崩潰;這個玩具示例的具體錯誤是“執行緒 1:EXC_BAD_ACCESS(代碼 = 1,地址 = 0x8)”。任何見解都是最受歡迎的!
順便說一句,我已經研究了這些問題:(帶有動態資料崩潰的 SwiftUI 分層選取器)和(swiftUi:一個螢屏上的 2 個選取器- 應用程式崩潰并顯示“索引超出范圍”),但如果可能的話,我想避免將我的字串選擇變數(pickerOneSelection、pickerThreeSelection)轉換為整數,然后必須將其轉換回字串以獲取與用戶選擇相關聯的文本。如果沒有索引變數就不可能做我想做的事情,如果你能幫助我理解為什么,那將非常有幫助。
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
非常感謝您的幫助和專業知識!
uj5u.com熱心網友回復:
問題的關鍵是你隱藏了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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/366171.html
