未启用带有枚举源的 SwiftUI 选择器
SwiftUI Picker with Enum Source Is Not Enabled
我正在尝试了解新的 SwiftUI 选择器样式,尤其是对于来自数组以外的源的数据。我用枚举构建了一个选择器。我首先制作了一个只有选择器和相关枚举的简单应用程序。这按预期工作。
奇怪的是,当我将该代码复制并粘贴到另一个应用程序以及表单中的其他控件时,选择器似乎处于非活动状态。我看到了,但是不能点击。
这是第一个应用程序(选择器有效):
struct ContentView: View {
@State private var selectedVegetable = VegetableList.asparagus
var body: some View {
NavigationView {
Form {
Section {
Picker(selection: $selectedVegetable, label: Text("My Vegetables")) {
ForEach(VegetableList.allCases) { v in
Text(v.name).tag(v)
//use of tag makes no difference
}
}
}
}
.navigationBarTitle("Picker with Enum")
}
}
}
enum VegetableList: CaseIterable, Hashable, Identifiable {
case asparagus
case celery
case shallots
case cucumbers
var name: String {
return "\(self)".map {
[=10=].isUppercase ? " \([=10=])" : "\([=10=])" }.joined().capitalized
}
var id: VegetableList {self}
}
这是带有其他控件的应用程序(选择器不起作用)。
struct Order {
var includeMustard = false
var includeMayo = false
var quantity: Int = 1
var avocadoStyle = PepperoniStyle.sliced
var vegetableType = VegetableType.none
var breadType = BreadType.wheat
}
struct OrderForm: View {
@State private var order = Order()
@State private var comment = "No Comment"
@State private var selectedVegetable = VegetableType.asparagus
@State private var selectedBread = BreadType.rye
func submitOrder() {}
var body: some View {
Form {
Text("Vegetable Ideas")
.font(.title)
.foregroundColor(.green)
Section {
Picker(selection: $selectedVegetable, label: Text("Vegetables")) {
ForEach(VegetableType.allCases) { v in
Text(v.name).tag(v)
}
}
Picker(selection: $selectedBread, label: Text("Bread")) {
ForEach(BreadType.allCases) { b in
Text(b.name).tag(b)
}
}
}
Toggle(isOn: $order.includeMustard) {
Text("Include Mustard")
}
Toggle(isOn: $order.includeMayo) {
Text("Include Mayonaisse")
}
Stepper(value: $order.quantity, in: 1...10) {
Text("Quantity: \(order.quantity)")
}
TextField("Say What?", text: $comment)
Button(action: submitOrder) {
Text("Order")
}
}
.navigationBarTitle("Picker in Form")
.padding()
}
}
enum PepperoniStyle {
case sliced
case crushed
}
enum BreadType: CaseIterable, Hashable, Identifiable {
case wheat, white, rye, sourdough, seedfeast
var name: String { return "\(self)".capitalized }
var id: BreadType {self}
}
enum VegetableType: CaseIterable, Hashable, Identifiable {
case none
case asparagus
case celery
case shallots
case cucumbers
var name: String {
return "\(self)".map {
[=11=].isUppercase ? " \([=11=])" : "\([=11=])" }.joined().capitalized
}
var id: VegetableType {self}
}
Xcode 11 贝塔 7,卡特琳娜贝塔 7
Preview 和 Simulator 之间没有行为差异。我必须丢失
这里有一些简单的东西。任何指导将不胜感激。
我将表单包装在 NavigationView 中,选择器现在按预期运行。我需要研究一下,一旦文档更完整,但也许这可以帮助其他人。
我正在尝试了解新的 SwiftUI 选择器样式,尤其是对于来自数组以外的源的数据。我用枚举构建了一个选择器。我首先制作了一个只有选择器和相关枚举的简单应用程序。这按预期工作。
奇怪的是,当我将该代码复制并粘贴到另一个应用程序以及表单中的其他控件时,选择器似乎处于非活动状态。我看到了,但是不能点击。
这是第一个应用程序(选择器有效):
struct ContentView: View {
@State private var selectedVegetable = VegetableList.asparagus
var body: some View {
NavigationView {
Form {
Section {
Picker(selection: $selectedVegetable, label: Text("My Vegetables")) {
ForEach(VegetableList.allCases) { v in
Text(v.name).tag(v)
//use of tag makes no difference
}
}
}
}
.navigationBarTitle("Picker with Enum")
}
}
}
enum VegetableList: CaseIterable, Hashable, Identifiable {
case asparagus
case celery
case shallots
case cucumbers
var name: String {
return "\(self)".map {
[=10=].isUppercase ? " \([=10=])" : "\([=10=])" }.joined().capitalized
}
var id: VegetableList {self}
}
这是带有其他控件的应用程序(选择器不起作用)。
struct Order {
var includeMustard = false
var includeMayo = false
var quantity: Int = 1
var avocadoStyle = PepperoniStyle.sliced
var vegetableType = VegetableType.none
var breadType = BreadType.wheat
}
struct OrderForm: View {
@State private var order = Order()
@State private var comment = "No Comment"
@State private var selectedVegetable = VegetableType.asparagus
@State private var selectedBread = BreadType.rye
func submitOrder() {}
var body: some View {
Form {
Text("Vegetable Ideas")
.font(.title)
.foregroundColor(.green)
Section {
Picker(selection: $selectedVegetable, label: Text("Vegetables")) {
ForEach(VegetableType.allCases) { v in
Text(v.name).tag(v)
}
}
Picker(selection: $selectedBread, label: Text("Bread")) {
ForEach(BreadType.allCases) { b in
Text(b.name).tag(b)
}
}
}
Toggle(isOn: $order.includeMustard) {
Text("Include Mustard")
}
Toggle(isOn: $order.includeMayo) {
Text("Include Mayonaisse")
}
Stepper(value: $order.quantity, in: 1...10) {
Text("Quantity: \(order.quantity)")
}
TextField("Say What?", text: $comment)
Button(action: submitOrder) {
Text("Order")
}
}
.navigationBarTitle("Picker in Form")
.padding()
}
}
enum PepperoniStyle {
case sliced
case crushed
}
enum BreadType: CaseIterable, Hashable, Identifiable {
case wheat, white, rye, sourdough, seedfeast
var name: String { return "\(self)".capitalized }
var id: BreadType {self}
}
enum VegetableType: CaseIterable, Hashable, Identifiable {
case none
case asparagus
case celery
case shallots
case cucumbers
var name: String {
return "\(self)".map {
[=11=].isUppercase ? " \([=11=])" : "\([=11=])" }.joined().capitalized
}
var id: VegetableType {self}
}
Xcode 11 贝塔 7,卡特琳娜贝塔 7 Preview 和 Simulator 之间没有行为差异。我必须丢失 这里有一些简单的东西。任何指导将不胜感激。
我将表单包装在 NavigationView 中,选择器现在按预期运行。我需要研究一下,一旦文档更完整,但也许这可以帮助其他人。