(SwiftUI) 如何让用户从 Picker 中选择一个值,然后对其进行编辑?
(SwiftUI) How can I let user to pick a value from Picker, and then edit it?
我是 swiftUI 的新手,不完全了解变量的工作原理。
我想制作一个选择器,然后当用户选择其中一种口味时,他可以在下方编辑该口味的数量,因此变量数量也会发生变化(因此我可以在另一个中显示当前数量查看)。
如您现在所见,这些值是随机的 ( 1 - 6 ),但我想以某种方式让用户对它们中的每一个进行更改,具体取决于用户选择的值。
在您看到(当前库存:)的地方,它也应该显示所选口味的库存。
这是我的代码:
struct UpdateView: View {
var flavours = ["Romantic Suicide", "Project X", "Psycho", "Covid-19", "Dramalama", "Luxury"]
@State private var selectedFlavour = "Romantic Suicide"
var romanticSuicide = 3
var projectX = 2
var psycho = 1
var covid19 = 5
var dramalama = 4
var luxury = 6
var body: some View {
ZStack {
Image("BackgroundImage").resizable().scaledToFill().edgesIgnoringSafeArea(.all).opacity(0.2)
VStack {
Text("Select flavour").foregroundColor(.white).font(Font.custom("BebasNeue", size: 27))
Picker("Please choose a flavour", selection: $selectedFlavour) {
ForEach(flavours, id: \.self) {
Text([=10=])
}
}
Text("\(selectedFlavour) current stock: 1").foregroundColor(.white).font(Font.custom("BebasNeue", size: 22))}
}.background(.black)
}
}
struct UpdateView_Previews: PreviewProvider {
static var previews: some View {
UpdateView()
}
}
有人可以解释一下我该怎么做吗?提前致谢。
你可以做的是创建一个名为“FlavourItem”的结构,例如包含 2 个变量:flavor 和 amount。
struct FlavourItem {
var flavour: String
var amount: Int
}
然后,除了为 selectedFlavour 创建一个 @State 变量外,您还可以为 FlavourItem 创建一个。
@State var flavourItem: FlavourItem
然后您可以创建 UI 来要求用户输入他想要的内容并将其存储在 FlavourItem 对象中。
您可以从该代码开始:
import SwiftUI
struct FlavourItem: Hashable { // Neaded to use Picker
var flavour: String
var amount: Double
}
struct ContentView: View {
// Array of FlavourItems
var flavours: [FlavourItem] = [
FlavourItem(flavour: "Romantic Suicide", amount: 1),
FlavourItem(flavour: "Project X", amount: 2),
FlavourItem(flavour: "American Psycho", amount: 3),
FlavourItem(flavour: "Covid 19", amount: 4),
FlavourItem(flavour: "Dramalama", amount: 5),
FlavourItem(flavour: "Luxury", amount: 6)
]
@State private var selectedFlavour: FlavourItem = FlavourItem(flavour: "Romantic Suicide", amount: 1)
var body: some View {
VStack {
VStack {
Text("Select flavour").foregroundColor(.white).font(Font.custom("BebasNeue", size: 27))
Text("Select flavour").foregroundColor(.white).font(Font.custom("BebasNeue", size: 27))
Picker("Select flavour", selection: $selectedFlavour) {
ForEach(flavours, id: \.self) {
Text("\([=12=].flavour)")
}
}.clipped()
Text("\(selectedFlavour.flavour) current stock: \(selectedFlavour.amount)").font(Font.custom("BebasNeue", size: 22))
Slider(value: $selectedFlavour.amount, in: 0...20)
Text("Current flavour value: \(selectedFlavour.amount)")
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
我是 swiftUI 的新手,不完全了解变量的工作原理。
我想制作一个选择器,然后当用户选择其中一种口味时,他可以在下方编辑该口味的数量,因此变量数量也会发生变化(因此我可以在另一个中显示当前数量查看)。
如您现在所见,这些值是随机的 ( 1 - 6 ),但我想以某种方式让用户对它们中的每一个进行更改,具体取决于用户选择的值。
在您看到(当前库存:)的地方,它也应该显示所选口味的库存。
这是我的代码:
struct UpdateView: View {
var flavours = ["Romantic Suicide", "Project X", "Psycho", "Covid-19", "Dramalama", "Luxury"]
@State private var selectedFlavour = "Romantic Suicide"
var romanticSuicide = 3
var projectX = 2
var psycho = 1
var covid19 = 5
var dramalama = 4
var luxury = 6
var body: some View {
ZStack {
Image("BackgroundImage").resizable().scaledToFill().edgesIgnoringSafeArea(.all).opacity(0.2)
VStack {
Text("Select flavour").foregroundColor(.white).font(Font.custom("BebasNeue", size: 27))
Picker("Please choose a flavour", selection: $selectedFlavour) {
ForEach(flavours, id: \.self) {
Text([=10=])
}
}
Text("\(selectedFlavour) current stock: 1").foregroundColor(.white).font(Font.custom("BebasNeue", size: 22))}
}.background(.black)
}
}
struct UpdateView_Previews: PreviewProvider {
static var previews: some View {
UpdateView()
}
}
有人可以解释一下我该怎么做吗?提前致谢。
你可以做的是创建一个名为“FlavourItem”的结构,例如包含 2 个变量:flavor 和 amount。
struct FlavourItem {
var flavour: String
var amount: Int
}
然后,除了为 selectedFlavour 创建一个 @State 变量外,您还可以为 FlavourItem 创建一个。
@State var flavourItem: FlavourItem
然后您可以创建 UI 来要求用户输入他想要的内容并将其存储在 FlavourItem 对象中。
您可以从该代码开始:
import SwiftUI
struct FlavourItem: Hashable { // Neaded to use Picker
var flavour: String
var amount: Double
}
struct ContentView: View {
// Array of FlavourItems
var flavours: [FlavourItem] = [
FlavourItem(flavour: "Romantic Suicide", amount: 1),
FlavourItem(flavour: "Project X", amount: 2),
FlavourItem(flavour: "American Psycho", amount: 3),
FlavourItem(flavour: "Covid 19", amount: 4),
FlavourItem(flavour: "Dramalama", amount: 5),
FlavourItem(flavour: "Luxury", amount: 6)
]
@State private var selectedFlavour: FlavourItem = FlavourItem(flavour: "Romantic Suicide", amount: 1)
var body: some View {
VStack {
VStack {
Text("Select flavour").foregroundColor(.white).font(Font.custom("BebasNeue", size: 27))
Text("Select flavour").foregroundColor(.white).font(Font.custom("BebasNeue", size: 27))
Picker("Select flavour", selection: $selectedFlavour) {
ForEach(flavours, id: \.self) {
Text("\([=12=].flavour)")
}
}.clipped()
Text("\(selectedFlavour.flavour) current stock: \(selectedFlavour.amount)").font(Font.custom("BebasNeue", size: 22))
Slider(value: $selectedFlavour.amount, in: 0...20)
Text("Current flavour value: \(selectedFlavour.amount)")
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}