导航回视图时更新 SwiftUI 选择器最小值和最大值
Posted
技术标签:
【中文标题】导航回视图时更新 SwiftUI 选择器最小值和最大值【英文标题】:Update SwiftUI picker minimum and maximum when navigating back to a view 【发布时间】:2019-12-03 18:45:14 【问题描述】:我正在开发一个使用选择器的SwiftUI
应用程序。我有 6 个选择器,我希望能够为其设置 minimum
和 maximum
值。我对steppers
有一个单独的视图来设置每个picker
的minimum
和maximum
。所有变量都存储在环境中。现在,当从设置视图导航回主视图时,选择器不会更新。在您移动拾取器之前,它们不会改变。当视图导航回来时,有没有办法让选择器的最小值和最大值发生变化,而不必先移动选择器?
这是我的一个选择器的示例:
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)"))
【问题讨论】:
【参考方案1】:当您需要实时更改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)"))
【讨论】:
你能在课堂上做到这一点吗?我让你的例子正常工作,但那是一个结构。我的模型正在使用一个类,因为它符合 ObservableObject 并且当我使类可散列并消除所有错误时,选择器不会像您的示例中那样更新。 您可以将结构分配给您的类的实例变量。也许这是最快的第一个工作。以上是关于导航回视图时更新 SwiftUI 选择器最小值和最大值的主要内容,如果未能解决你的问题,请参考以下文章