Почему мой сборщик не отвечает в 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])")
        }
    }
}
}
Другие вопросы по тегам