我正在开发一个使用选择器的 SwiftUI
应用程序。我有 6 个选择器,我希望能够为其设置 minimum
和 maximum
值。我有一个带有 steppers
的单独 View ,用于设置每个 picker
的 minimum
和 maximum
。所有变量都存储在环境中。现在,当从设置 View 导航回主视图时,选择器不会更新。在您移动拾取器之前,它们不会更改。有没有一种方法可以在 View 导航回来时更改选择器的最小值和最大值,而不是必须先移动选择器?
这是我的一个选择器的示例:
Picker(selection: self.$ticket.pick1, label: Text("")) {
ForEach(self.ticket.min1 ... self.ticket.max1, id: \.self) {
Text("\($0)").frame(width: geometry.size.width / 6)
}
}
这是最小和最大步进器之一的示例:
Text("Pick One").fontWeight(.bold)
Stepper(value: $ticket.min1, in: 1...100, label: {Text("Minimum: \(ticket.min1)")})
Stepper(value: $ticket.max1, in: 1...100, label: {Text("Maximum: \(ticket.max1)")})
最佳答案
当你需要实时改变一个picker
范围时,你可以考虑.id()
。下面的例子可以解决这个具体问题。在真实的复杂情况下可能会涉及到其他情况,比如数据绑定(bind)。但那是另一回事了。
struct Ticket : Hashable{
var min1 : Int
var max1 : Int
var pick1 : Int
}
struct CoolPickers: View {
@State var ticket: Ticket = Ticket(min1: 1, max1: 10, pick1: 2)
var body: some View {
GeometryReader { geometry in
NavigationView{
VStack{
NavigationLink("Next", destination: SettingPickersView(ticket: self.$ticket))
Picker(selection: self.$ticket.pick1, label: Text("")) {
ForEach(self.ticket.min1 ... self.ticket.max1, id: \.self) {
Text("\($0)")
.frame(width: geometry.size.width / 6)
}
}.id(self.ticket)
}
}
}
}
}
struct SettingPickersView: View {
@Binding var ticket: Ticket
var body: some View {
Group{
Text("Pick One").fontWeight(.bold)
Stepper(value: $ticket.min1, in: 1...100, label: {Text("Minimum: \(ticket.min1)")})
Stepper(value: $ticket.max1, in: 1...100, label: {Text("Maximum: \(ticket.max1)")})
}
}
}
关于ios - 导航回 View 时更新 SwiftUI 选择器的最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59163472/