Почему мой сборщик не отвечает в SwiftUI?
Я пробовал переключаться между сегментированным и колесным сборщиком, но ни один из них не регистрирует выбор при нажатии.
NavigationView {
Form {
Picker(selection: self.$settings.senatorChoice, label: Text("Choose a senator")) {
ForEach(0 ..< self.customSenators.count) {
Text(self.customSenators[$0])
}
}.pickerStyle(WheelPickerStyle())
.labelsHidden()
.padding()
}
}
3 ответа
Решение
Дважды проверьте, что settings.senatorChoice
является Int
. Тип вашего ассортимента вForEach
должен соответствовать типу вашего Picker
привязка. (Подробнее см. Здесь).
Кроме того, вы, вероятно, захотите использовать ForEach(self.customSenators.indices, id: \.self)
. Это предотвращает возможные сбои и устаревание пользовательского интерфейса, если элементы добавляются или удаляются изcustomSenators
. (См. Здесь для получения дополнительной информации.)
Добавьте тег к каждому элементу средства выбора, чтобы они были уникальными, например
Text(self.customSenators[$0]).tag($0)
Следующий тестовый код регистрирует выбор при нажатии.
struct Settings {
var senatorChoice: Int = 0
}
struct ContentView: View {
@State private var settings = Settings()
@State private var customSenators = ["One","Two","Three"]
var body: some View {
NavigationView {
Form {
Picker(selection: self.$settings.senatorChoice, label: Text("Choose a senator")) {
ForEach(0 ..< customSenators.count) {
Text(self.customSenators[$0])
}
}.pickerStyle(SegmentedPickerStyle())
.labelsHidden()
.padding()
Text("value: \(customSenators[settings.senatorChoice])")
}
}
}
}