在导航回视图时更新 SwiftUI 选取器的最小值和最大值



我正在开发一个使用选取器的SwiftUI应用程序。我有 6 个选取器,我希望能够为其设置minimum值和maximum值。我有一个单独的视图,steppers来设置每个pickerminimummaximum。所有变量都存储在环境中。目前,从设置视图导航回主视图时,选取器不会更新。在您移动选取器之前,它们不会更改。有没有办法在视图向后导航时必须更改选取器的最小值和最大值,而不必先移动选取器? 这是我的一个选择器的示例:

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().以下示例可以解决此特定问题。它可能涉及真实复杂情况下的其他情况,例如数据绑定。但那是另一回事了。

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)")})
}
}
}

最新更新