Я делаю меню, где выбранный элемент имеет галочку. Сейчас галочка стоит справа::
Button(action: {
self.categoryIndex = index
self.selectedCategory = category
}, label: {
Text(category)
if selectedCategory == categories[index] {
Image(systemName: "checkmark")
}
})
Мне нужна галочка с левой стороны, как на этой картинке: Как мне добиться выбора, как на фото?





Вероятно, есть и другие способы сделать это, но вот два варианта:
Использование средства выбора
Picker("Menu", selection: $selection) {
ForEach(1..<5, id: \.self) { number in
Text("Option \(number)")
}
}
.pickerStyle(MenuPickerStyle())
который будет отображаться следующим образом (iOS/MacOS):
Использование переключателей
Это немного сложнее, поскольку вы хотите привязать какое-то действие к выбору (при условии, что вам нужен один выбор, как указано выше), поэтому я не знаю, стоит ли это того, но по педагогическим причинам, вот оно:
struct CheckedMenu: View {
@State private var selection = "1"
var body: some View {
Menu("Menu") {
Toggle("Option 1", isOn: bindingForOption("1"))
Toggle("Option 2", isOn: bindingForOption("2"))
}
}
private func bindingForOption(_ option: String) -> Binding<Bool> {
Binding<Bool>(get: { selection == option }, set: { if $0 { selection = option } })
}
}
который будет отображаться следующим образом (iOS/MacOS):
Наконец, обратите внимание, что второй вариант (переключатели) позволяет одновременно проверять несколько (несвязанных) элементов, что было бы лучшим выбором для меню «опций», таких как:
Код для переключателей в моем ответе уже обрабатывает это при условии, что значения привязки различны. Конечно, вы можете использовать ForEach вместо того, чтобы вручную писать каждую строку.
Спасибо за подробный ответ. Я не могу использовать каретки вверх / вниз с помощью Picker, поэтому я воспользуюсь вашим предложением по переключению. Как я могу предотвратить множественный выбор?