ios - 导航回视图时更新 SwiftUI 选择器最小值和最大值
问题描述
我正在开发一个使用选择器的SwiftUI
应用程序。我有 6 个选择器,我希望能够为其设置minimum
和maximum
值。我有一个单独的视图来steppers
设置每个. 所有变量都存储在环境中。现在,从设置视图导航回主视图时,选择器不会更新。在您移动拾取器之前,它们不会改变。当视图导航回来时,有没有办法让选择器的最小值和最大值发生变化,而不必先移动选择器?这是我的选择器之一的示例:minimum
maximum
picker
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)")})
}
}
}
推荐阅读
- azure - 无法连接到私有 docker 存储库
- javascript - Why doesn't state update in functional component
- javascript - Javascript 表单验证无法在浏览器中正常工作
- pyspark - 如何查询另一列中存在的列?
- android - 颜色控件不适用于 com.google.android.material 中的 TextInputLayout:材料版本高于 1.0.0
- ios - IPA 处理失败'/xcode 在 Xcode 11 中分发企业版本时崩溃
- javascript - JQuery: One function between two sites. How to do?
- visual-studio-2013 - BizTalk 2013R2 / VS 2013 - Compatibility & Deployment to other servers
- python - Django 2.2 : Is there any way to remove app name from admin urls?
- gradle - WildFly 18.0.1.Final - 获取 WildFly 组件“org.picketlink:picketlink-api:::2.5.5.SP12-redhat-00006”时出错